3

我有一个从 url 解码的 JSON 对象,如下所示:

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

我得到的数据来自新的战网 API,它作为包含字符数据的 JSON 对象返回。

  • 这是一个实际的链接,在该链接中可以找到字符并且要生成数据:Character Found
  • 现在这里是一个不存在并生成错误的字符的链接:Character Not Found

错误作为包含“状态”和“原因”属性的 JSON 对象返回。“status”属性的值将始终为“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)

我在战网 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 回答