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
- メディア: その他
- この商品を含むブログを見る