当来自URL的数据很小时,JSON对象为NULL?

时间:2012-04-24 19:43:23

标签: php json

我有一个JSON对象即时解码,如下所示:

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

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

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

错误作为包含“status”和“reason”属性的JSON对象返回。 “status”属性的值始终为“nok”。

我的问题是,当字符未找到时,JSON对象$ var为NULL,如果它是FOUND,则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论坛上,但我想我也会在这里试试。

1 个答案:

答案 0 :(得分:3)

这是因为页面Character Not Found页面返回了一个404 Not Found HTTP响应代码,这很有意义,但被认为是错误。

当遇到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);