PHP4でXMLをJSONに変換するメモ
APIを使ってアプリケーションを構築していると、どうしてもXMLをJSONに変換して使いたくなることが多かったのでやってみた。XMLからJSONへの変換はJavaScriptでやる場合とXMLをGETしてくるプログラム側でやる場合とが考えられるが、今回はなんとなくプログラム側にした。しかしサーバのPHPはPHP4なのでSimpleXMLは使えない。
そこで、XMLからPHP変数への変換はXML_Unserializerを利用し、PHP変数からJSONへの変換はJsphonを使った。変換する関数は次のような感じ。
require_once("HTTP/Request.php"); require_once("XML/Unserializer.php"); require_once("Jsphon/Jsphon.php"); function xmlToJson($url, $callback = "") { $req =& new HTTP_Request($url); if (PEAR::isError($req->sendRequest())) { die($req->getMessage()); } $xml = $req->getResponseBody(); $xml = mb_convert_encoding($xml, "UTF-8", "auto"); $unserializer =& new XML_Unserializer(); $unserializer->setOption('parseAttributes', TRUE); $status = $unserializer->unserialize($xml); if (PEAR::isError($status)) { die($status->getMessage()); } $json = Jsphon::encode($unserializer->getUnserializedData(), false); if ($callback != "") { $json = $callback . '(' . $json . ')'; } header("Content-Type: text/javascript; charset=utf-8"); echo $json; }
これを少しいじれば、パラメータにURLとコールバック関数を与えるとJSONを返してくれるAPIとして使える。XMLなのでAmazon Web ServiceのRESTの取得とか、RSSファイルの取得とかがこれひとつでできる。
コメントを残す