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