【问题标题】:Reading JSON from remote URL in PHP [closed]从 PHP 中的远程 URL 读取 JSON [关闭]
【发布时间】:2013-03-11 05:59:31
【问题描述】:

我有这个 JSON 文件:

http://www.jeewanaryal.com/angryQuiz/eighties/json/eighties.json

我正在尝试在 PHP 中对其进行解码,如下所示:

$json = file_get_contents('http://www.jeewanaryal.com/angryQuiz/eighties/json/eighties.json'); 
$data = json_decode($json);
var_dump($data);

但是,我得到的输出是 NULL。我错过了什么吗?

【问题讨论】:

  • 来自$data,o/p为NULL
  • 如何输出我的整个 json 数据?
  • 你的第一行行得通吗,var_dump($json); 给你什么?
  • 我现在只是在尝试这 3 行代码,我的意思是我没有遍历 JSON 数据。只有那 3 行 PHP 行,我得到 NULL :-(
  • (Windows 记事本问题)请参考这个问题,我也分享了这个问题并修复了它:stackoverflow.com/questions/10290849/…

标签: php json


【解决方案1】:

文档

json_decode 可以返回 NULL 作为 documentation 状态。

以适当的 PHP 类型返回以 json 编码的值。价值观 true、false 和 null(不区分大小写)返回为 TRUE、FALSE 和 NULL 分别。如果无法解码 json,则返回 NULL 或者如果编码的数据比递归限制更深。

您的问题

json_decode 在这里失败是因为 id 6

内部的\n

{ "id": 6, "url": "http://jeewanaryal.com/angryQuiz/eighties/images/betterOffDead.jpg", "quest": "在电影《死而复生》中,\n 的名字是什么 莱恩的弟弟?", "answer": [ { "a": { "text": "Bradger", “状态”:1 } },{ “b”:{ “文本”:“彼得”,“状态”:0 } },{ “c”:{ “文本”:“弗兰克”,“状态”:0 } },{“d”:{“文本”:“迈克尔”, “状态”:0 } } ] }

解决方案

我想你最好的选择是在json_decode之前逃脱他们

$safe_json = str_replace("\n", "\\n", $json);

【讨论】:

  • 但我不知道为什么我得到 NULL,这是一个有效的 JSON。
  • 哇,很棒的收获,谢谢。但我只是想知道它是一个有效的 JSON。我用 \n 换行。它不应该工作吗?
  • 逃离他们?我已将其添加到答案中。
  • 嘿 Rawkode,我尝试了不同的 JSON,它没有任何换行符。我试过这个jeewanaryal.com/phpTest/jsonTest.json 仍然说 NULL :-(。看起来 \n 不是这里的问题。
  • 不,这对我来说解码得很好。删除您的\n,您会看到它有效。如果您仍然是NULL,请按照@jeroen 的建议检查您的php.ini
【解决方案2】:

这只是一个猜测,但由于您没有显示$json 包含的内容,我将假设file_get_contents 返回false,从而导致您得到的结果。

您应该检查您的php.ini 文件,allow_url_fopen 的值是多少?如果那是0,则意味着您无法从http 地址读取文件,这可能是问题所在。

如果有问题,只需将allow_url_fopen 的值更改为1

【讨论】:

  • 好的,Jeroen,谢谢,我会试试这个。
【解决方案3】:

使用PHP.NET json_last_error()的例子我发现你的json语法不正确:

switch (json_last_error()) {
        case JSON_ERROR_NONE:
            echo ' - No errors';
        break;
        case JSON_ERROR_DEPTH:
            echo ' - Maximum stack depth exceeded';
        break;
        case JSON_ERROR_STATE_MISMATCH:
            echo ' - Underflow or the modes mismatch';
        break;
        case JSON_ERROR_CTRL_CHAR:
            echo ' - Unexpected control character found';
        break;
        case JSON_ERROR_SYNTAX:
            echo ' - Syntax error, malformed JSON';
        break;
        case JSON_ERROR_UTF8:
            echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
        break;
        default:
            echo ' - Unknown error';
        break;
}

输出:

 - Syntax error, malformed JSON

但是,我在以下网站检查了您的 json 代码,但显示有效:

【讨论】:

  • 是的,你是对的。我在 JSON 文件中使用了新的换行符 \n,这可能会导致问题。但是,在线 JSON 验证很好,它不适用于 PHP 解码器。
【解决方案4】:

请将第二个参数设置为 true。这将为您提供一个关联数组。如果结果仍然为空,我会对 file_get_contents 是否返回一些内容感兴趣。

【讨论】:

  • 我试过你的,还是 NULL :-(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
相关资源
最近更新 更多