3

次のようなURLからデコードするJSONオブジェクトがあります。

    $var = json_decode(file_get_contents($url), true);

私が取得しているデータは、文字データを含む JSON オブジェクトとして返される新しい Battle.net API からのものです。

  • 文字が見つかり、生成されるデータがある実際のリンクは次のとおりです: Character Found
  • ここに、存在せず、エラーを生成する文字のリンクがあります: Character Not Found

エラーは、"status" および "reason" 属性を含む JSON オブジェクトとして返されます。「ステータス」属性の値は常に「nok」になります。

私の問題は、文字が見つからない場合、JSON オブジェクト $var が NULL であり、見つかった場合、JSON オブジェクト $var には正しいデータが含まれていることです。適切なエラーメッセージを出力できるように、ステータスが「nok」であるかどうかを確認できる必要があります

私は持っている:

  • リンクをチェックして、正しく生成されていることを確認しました。
  • に変更json_decode(file_get_contents($url), true)json_decode(file_get_contents($url), false)、$var をオブジェクトとしてアクセスしてみました。
  • 代わりにcURLを使用してみましたfile_get_contents($url)

Battle.net API フォーラムに投稿しましたが、ここでも試してみようと思いました。

4

1 に答える 1

3

これは、Character Not Found ページが404 Not FoundHTTP 応答コードを返すためです。これは非常に理にかなっていますが、エラーと見なされます。

などのファイル関数は、HTTP ストリーム ラッパーでエラー (404、500 など) が発生すると、デフォルトfile_get_contentsで戻ります。false

エラーを無視してコンテンツを返すために、それjson_decodeを解析できるようにするには、コンテキストを使用する必要があります。

$context = stream_context_create(array(
    'http' => array('ignore_errors' => true),
));

$var = json_decode(file_get_contents($url, false, $context), true);
于 2012-04-24T19:49:32.480 に答える