在PHP中从远程URL读取JSON

在PHP中从远程URL读取JSON,php,json,Php,Json,我有这个JSON文件: 我尝试用PHP对其进行如下解码: $json = file_get_contents('http://www.jeewanaryal.com/angryQuiz/eighties/json/eighties.json'); $data = json_decode($json); var_dump($data); 但是,我得到的输出是空的。我遗漏了什么吗?文档 json_decode可以返回NULL作为状态 返回用json编码的适当PHP类型的值。价值观 true、f

我有这个JSON文件:

我尝试用PHP对其进行如下解码:

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

但是,我得到的输出是空的。我遗漏了什么吗?

文档

json_decode
可以返回
NULL
作为状态

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

你的问题

json\u解码在这里失败,因为
\n
id 6

{“id”:6,“url”: "", “问题”:“在电影《死得更好》中,你的名字是什么?” 莱恩的弟弟?,“回答”:[{“a”:{“文本”:“布拉格”, “状态”:1}},{“b”:{“文本”:“彼得”,“状态”:0},{“c”:{ “文本”:“弗兰克”,“状态”:0}},{“d”:{“文本”:“迈克尔”, “状态”:0}}]}

解决方案

我想你最好的办法是在
json\u解码之前逃离它们


$safe\u json=str\u replace(“\n”,“\\n”,“$json”)

请将第二个参数设置为true。这将为您提供一个关联数组。如果结果仍然为空,我会关心文件\u get\u内容是否返回了内容。

使用来自的示例,我发现您的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
包含的内容,我将假设
文件获取内容
返回
false
,导致您得到的结果

您应该检查您的
php.ini
文件,
allow\u url\u fopen
的值是多少?如果这是
0
,则意味着您无法从
http
地址读取文件,因此这可能是问题所在


只要将
allow\u url\u fopen
的值更改为
1
就可以了。从$data开始,o/p为空。我如何输出我的整个json数据?您的第一行工作吗?
var\u dump($json)是什么给你?我现在只是尝试这3行代码,我的意思是我没有循环通过JSON数据。只有这3行PHP代码,我得到NULL:-((Windows记事本问题)请参考这个,我也分享了这个问题,它解决了它:但我不知道为什么我会得到空值,这是一个有效的JSON。哇,很好的捕获,谢谢。但我只是想知道它是一个有效的JSON。我用过一个新的行。它不应该工作吗?逃避它们吗?我已经将它添加到了答案中。嘿,Rawkode,我尝试了不同的JSON,它可以没有任何新行字符。我尝试了这一个,但仍然说NULL:-(。看起来\n不是问题所在。不,这对我来说很好。删除你的
\n
,你就会看到它工作了。如果你的php.ini仍然是
NULL
,那么请按照@jeroenI-try-yours的建议检查你的php.ini,仍然是NULL:-(是的,你是对的。我在JSON文件中使用了一个新的换行符,\n这可能会导致问题。但是,联机JSON验证很好,它对PHP解码器无效。好的,Jeroen,谢谢,我将尝试此方法。