それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

PHP で json to xml をする

json2xml を実現するには simplexmlが便利です。

XMLでデータ管理するのは、いいんだけど、JSONのほうがメジャーだし、パースするの楽だから、JSON使いたい。でも旧システムがXMLとかで、仕方なくXMLを出力してあげようってとき

simpleXMLでパパっと出来ます。

<?php


$json_str = '{ "a": "12345", "b":"09876" }';
$obj = (array)json_decode($json_str);

$obj = array_flip($obj);
$xml = new SimpleXMLElement('<root/>');
array_walk_recursive($obj, array ($xml, 'addChild'));
header("Content-type : text/xml; charset=utf-8");
echo $xml->asXML();

実行結果

<?xml version="1.0"?>
<root><a>12345</a><b>09876</b></root>

いくつかポイント

  • json 文字列を PHPオブジェクトにデコードして
  • php オブジェクト(stdclass)をArrayに無理やりキャストしてる。
  • array_flip() で キーと値を入れ替えてる

addChildするときに、 array_flip してないと、キーと値が逆になったXMLが出力されちゃう。

細いことは考えずに、パパっと出来る範囲でやればいいと思うわけです。