我有一个从 url 解码的 JSON 对象,如下所示:
$var = json_decode(file_get_contents($url), true);
我得到的数据来自新的 battle.net 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)
我在 battle.net API 论坛上发帖,但我想我也会在这里尝试。
最佳答案
这是因为页面 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);
关于php - 当来自 URL 的数据很小时,JSON 对象为 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10304921/