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ファイルの取得とかがこれひとつでできる。
コメントを残す