10

我有这个 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。我错过了什么吗?

4

4 回答 4

8

使用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 代码,但它显示有效:

于 2013-03-21T16:16:21.987 回答
5

文档

json_decode可以NULL文档说明返回。

以适当的 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 ", "question": "在电影《死而复生》中,\n 是什么莱恩弟弟的名字?", "answer": [ { "a": { "text": "Bradger", "status": 1 } }, { "b": { "text": "Peter", "状态”:0 } },{“c”:{“文本”:“弗兰克”,“状态”:0 } },{“d”:{“文本”:“迈克尔”,“状态”:0 } } ] }

解决方案

我想你在这里最好的选择是先逃离他们json_decode

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

于 2013-03-21T16:03:45.257 回答
0

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

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

如果这是问题,只需更改allow_url_fopento的值。1

于 2013-03-21T16:17:27.043 回答
0

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

于 2013-03-21T16:06:41.483 回答