PHP の file_get_contents 関数は BOM 付きの utf-8 を取得し、json_decode() は null を返します。

WBOY
リリース: 2016-06-23 14:37:31
オリジナル
1220 人が閲覧しました

問題: 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) "供应商类型"    }  }}
ログイン後にコピー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート