F.Ko-Jiの「一秒後は未来」

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ファイルの取得とかがこれひとつでできる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など