問題: php を使用してファイル内の json データを読み取ると、どのように解析しても null が返されます。
{"a":1,"b":2,"x":[{"c":3},{"d":4},{"e":5}]}
ファイルを読み取るには、file_get_contents 関数を使用します。
$json = '{"a":1,"b":2,"x":[{"c":3},{"d":4},{"e":5}]}'; var_dump(json_decode($json)); var_dump(json_decode($json, true));
phpでjson文字列を直接読み込んだら何も問題ないのに、なぜファイルから読み込むのでしょうか?
検索結果は以下の通りです:
PHP: json_decode - Manual
http://www.php.net/manual/zh/function.json-decode.php
php uses json_decode to return NULL?とメンテナンスとWebアーキテクチャ
http://www.nginx.cn/337.html
php json_decode null - toeasy - Blog Park
http://www.cnblogs.com/Toeasy/archive/2012/04/ 09/2439688. html
json_decode() は null-夜色-Yes-PHPChina を取得します - Powered by Discuz!
http://bbs.phpchina.com/thread-267593-1-1.html
PHP5 の file_get_contents 関数BOM -8 の utf を取得します。 ファイルの内容に注意してください - wangrianhuaihua のログ - NetEase ブログ
http://wangrianhuaihua.blog.163.com/blog/static/54251531201091915210555/
重要な結果は最後です二。 json_decode() が null を解析する理由は、json ファイルが BOM 付きの UTF-8 形式であるためです。
修正したコードは以下の通りで正常に解析できます。
$dmText = file_get_contents( AROOT .'data' . DS . 'DMType.json.php'); if(preg_match('/^\xEF\xBB\xBF/',$dmText)) { $dmText = substr($dmText,3); } //trim $dmText = t($dmText); echo $dmText; /* create array list from comments */ $dmList = json_decode($dmText,true); //当该参数为 TRUE 时,将返回 array 而非 object 。 var_dump($dmList);
表示結果:
コードを表示
{ "success": "true", "total":"4", "items": [ {"id":"1","c":"asdaEG","tb": "dm_suppliertype", "cn": "供应商类型","tips":"供应商类型"}, {"id":"2","c":"adsafR","tb": "suppliertype2", "cn": "供应商类型2","tips":"供应商类型"}, {"id":"3","c":"ada222","tb": "suppliertype3", "cn": "供应商类型3","tips":"供应商类型"}, {"id":"4","c":"23jetG","tb": "suppliertype4", "cn": "供应商类型4","tips":"供应商类型"} ]}array(3) { ["success"]=> string(4) "true" ["total"]=> string(1) "4" ["items"]=> array(4) { [0]=> array(5) { ["id"]=> string(1) "1" ["c"]=> string(6) "asdaEG" ["tb"]=> string(15) "dm_suppliertype" ["cn"]=> string(15) "供应商类型" ["tips"]=> string(15) "供应商类型" } [1]=> array(5) { ["id"]=> string(1) "2" ["c"]=> string(6) "adsafR" ["tb"]=> string(13) "suppliertype2" ["cn"]=> string(16) "供应商类型2" ["tips"]=> string(15) "供应商类型" } [2]=> array(5) { ["id"]=> string(1) "3" ["c"]=> string(6) "ada222" ["tb"]=> string(13) "suppliertype3" ["cn"]=> string(16) "供应商类型3" ["tips"]=> string(15) "供应商类型" } [3]=> array(5) { ["id"]=> string(1) "4" ["c"]=> string(6) "23jetG" ["tb"]=> string(13) "suppliertype4" ["cn"]=> string(16) "供应商类型4" ["tips"]=> string(15) "供应商类型" } }}