JSON

PHPで某ウェブサービスを利用し、アプリを制作している。

$res = simplexml_load_file($url);

としたところ、簡単にレスポンスをPHPオブジェクト化できて便利。

と思ったら、XMLのネームスペースに「:」が入ってると、うまくいかなくなった。APIのバージョンをあげるとダメ。

別の方法を模索することにした。

$res = file_get_contents($url);
$res = str_replace('header:Header','Header',$res);
$res = str_replace('itemSearch:ItemSearch','ItemSearch',$res);

こんどはうまくいった。が、正直美しくない。
文字列として受け取って、「:」をリプレイスして、もう一回PHPオブジェクトに変換する。

美しくない。


しかも、よくみたら、データが不完全だ。全然ダメだ、これ。

true
true
true

このXML

[Arg] => Array
(
[0] => true
[1] => true
[2] => true
[3] => true
)

trueってなんだよ。これじゃわかんねーよ。。。


XML使うのはやめた。JSONのほうが今っぽいし、PHPの軽ノリに合ってる(はず)。

$res = file_get_contents($url);
$res = json_decode($res);

レスポンスもきっちり受け取れた。コードも短くなった。

完璧だ。

と思ったら、連想配列の順番が変わってる。

Response :
{
Header :
Body :
}

がなぜか

Response :
{
Body :
Header :
}

となった

JSONPHPオブジェクトに変換する際に、入れ替わったのだろうか。