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

标签 php json

我有一个从 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/

相关文章:

php - 使用 ajax 处理长时间的服务器端操作?

PhpMygraph - 如何从数据库 mysql 分配数组

php - php 代码中没有报告错误,但没有数据进入数据库

c# - 如何在 .Net Core 中根据环境控制 appsettings.json 部署

javascript - Angular JS在textarea中显示和编辑模型

php - 简单的 PHP MYSQL select 语句不返回任何内容

php - 仅当 foreach 存在时才标题

c - 从 Tuple 解析 JSON 数组

java - Spring Boot 休息: issue with json

java - JSON 多态性