在PHP中从远程URL读取JSON

时间:2013-03-21 15:59:37

标签: php json

我有这个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 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

<强>文档

json_decode可以NULL状态返回json_decode

  

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

您的问题

由于 id 6

内的\n

json_decode失败了

  

{“id”:6,“url”:   “documentation”,   “问题”:“在电影'Better Off Dead'中,是什么名字   Lane的弟弟?“,”回答“:[{”a“:{”text“:”Bradger“,   “status”:1}},{“b”:{“text”:“Peter”,“status”:0}},{“c”:{   “text”:“Frank”,“status”:0}},{“d”:{“text”:“Michael”,   “状态”:0}}]}

<强>解决方案

我想你最好的选择是在$safe_json = str_replace("\n", "\\n", $json);

之前逃避它们

{{1}}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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