10

私はこのJSONファイルを持っています:

http://www.jeewanaryal.com/angryQuiz/eighties/json/eighties.json

そして私は次のようにPHPでそれをデコードしようとしています:

$json = file_get_contents('http://www.jeewanaryal.com/angryQuiz/eighties/json/eighties.json'); 
$data = json_decode($json);
var_dump($data);

しかし、私が得ている出力はNULLです。私は何かが足りないのですか?

4

4 に答える 4

8

PHP.NET json_last_error() の例を使用すると、json 構文が正しくないことがわかりました。

switch (json_last_error()) {
        case JSON_ERROR_NONE:
            echo ' - No errors';
        break;
        case JSON_ERROR_DEPTH:
            echo ' - Maximum stack depth exceeded';
        break;
        case JSON_ERROR_STATE_MISMATCH:
            echo ' - Underflow or the modes mismatch';
        break;
        case JSON_ERROR_CTRL_CHAR:
            echo ' - Unexpected control character found';
        break;
        case JSON_ERROR_SYNTAX:
            echo ' - Syntax error, malformed JSON';
        break;
        case JSON_ERROR_UTF8:
            echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
        break;
        default:
            echo ' - Unknown error';
        break;
}

出力:

 - Syntax error, malformed JSON

ただし、次の Web サイトで json コードを確認しましたが、有効と表示されています。

于 2013-03-21T16:16:21.987 に答える
5

ドキュメンテーション

json_decodeドキュメントNULLに記載されているように戻ることができます。

適切な PHP タイプで json にエンコードされた値を返します。値 true、false、および null (大文字と小文字を区別しない) は、それぞれ TRUE、FALSE、および NULL として返されます。json をデコードできない場合、またはエンコードされたデータが再帰制限よりも深い場合は、NULL が返されます。

あなたの問題

json_decodeID 6\nの内部のため、ここで失敗しています

{ "id": 6, "url": " http://jeewanaryal.com/angryQuiz/eighties/images/betterOffDead.jpg ", "question": "映画「Better Off Dead」で、\nレーンの弟の名前は?", "answer": [ { "a": { "text": "Bradger", "status": 1 } }, { "b": { "text": "Peter"," status": 0 } }, { "c": { "text": "Frank", "status": 0 } }, { "d": { "text": "Michael", "status": 0 } } ] }

解決

ここでのあなたの最善の策は、彼らから逃げることだと思いますjson_decode

$safe_json = str_replace("\n", "\\n", $json);

于 2013-03-21T16:03:45.257 に答える
0

これは単なる推測ですが、何が含まれているかを示していないため、 が返され、結果が得られる$jsonと仮定します。file_get_contentsfalse

php.iniファイルを確認する必要があります。 の値はallow_url_fopen何ですか? その場合、アドレス0からファイルを読み取ることができないため、問題が発生する可能性があります。http

それが問題である場合は、の値をに変更してallow_url_fopenください。1

于 2013-03-21T16:17:27.043 に答える
0

2 番目のパラメーターを true に設定してください。これにより、連想配列が得られます。結果がまだnullの場合、file_get_contentsが何かを返したかどうかに興味があります。

于 2013-03-21T16:06:41.483 に答える