PHPのjson_decodeは値が "
(ダブルコーテーションで)囲まれていないと null
になるっぽい。
json_decode() でnull になるJSONのパターン
1. "
で囲われていない値がある
json = {1: "星宮いちご"} <?php json_decode( json ); // => NULL
2. 値が '
(シングルコーテーション)で囲まれている
json = {"1": '<b class="idol">星宮いちご</b>'} <?php json_decode( json ); // => NULL
`
←コレもダメ
json = {"1": `星宮いちご`} <?php json_decode( json ); // => NULL
3. 行末に ,
がある
json = {"1": "星宮いちご",} <?php json_decode( json ); // => NULL
すべてのキーと値が "
で囲まれていて、最後に不要な ,
もない場合ならOK
json = '{"1": "星宮いちご"}'; <?php json_decode( json ); // => object { ["1"]=> string(15) "星宮いちご" } json_decode( json, true ); // => array(1) { [1]=> string(15) "星宮いちご" }
"
で囲まれた値の中で'
が使われているのはOK。
例えばHTMLタグを入れるような場合、値となる文字列は "
で囲み、属性は'
で囲めば大丈夫
json = ["<b class='idol'>星宮いちご</b>", "霧矢あおい", "紫吹蘭"]; <?php json_decode( json ); // => array(3) { [0]=> string(35) "<b class='idol'>星宮いちご</b>" [1]=> string(15) "霧矢あおい" [2]=> string(9) "紫吹蘭" } json_decode( json, true ); // => array(3) { [0]=> string(35) "<b class='idol'>星宮いちご</b>" [1]=> string(15) "霧矢あおい" [2]=> string(9) "紫吹蘭" }
PHP上の文字列でJSONを作る場合は全体を'
で囲むか、値を囲む"
をエスケープすればOK (最初からObjectや配列作れば良くね?需要あるのか謎だけど...)
<?php $json = '{"みくるの": "みらくる!"}'; json_decode( $json ); // => object { ["みくるの"]=> string(15) "ミラクル!" } $json = "{\"みくるの\": \"ミラクル!\"}"; json_decode( $json ); // => object { ["みくるの"]=> string(15) "ミラクル!" }
javascriptだと問題ないようなjsonが PHPのjson_decode()
だとnull
になって少しハマりました。
PHPのバージョンが上がって解消されるといいな...
[参考]
- 出版社/メーカー: NULL
- メディア: その他
- この商品を含むブログを見る