在PHP中从远程URL读取JSON
我有这个JSON文件: 我尝试用PHP对其进行如下解码:在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 = 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,谢谢,我将尝试此方法。