我有一个JSON对象即时解码,如下所示:
$var = json_decode(file_get_contents($url), true);
我得到的数据来自新的battle.net API,它作为包含字符数据的JSON对象返回。
错误作为包含“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作为对象进行访问。file_get_contents($url)
我发布在battle.net API论坛上,但我想我也会在这里试试。
答案 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);