我之前曾问过同样的问题。我想从http://pad.skyozora.com/data/pets.json解码json。以下是我之前使用的代码:
<?php
$html=file_get_contents("http://pad.skyozora.com/data/pets.json");
var_dump(json_decode($html,true)); //return null
var_dump(json_last_error()); // return 4
?>
从最后一个回答我知道json返回中有UTF8 DOM。我尝试了类似问题的答案:json_decode returns NULL after webservice call,但所有答案对我都不起作用。
经过更多的研究后,我发现了一种有效的方法:
<?php
$html=file_get_contents("http://pad.skyozora.com/data/pets.json");
$html=preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $html);
var_dump(json_decode($html, true));
var_dump(json_last_error());
?>
这成功地将json解码为数组。但是所有中文和日文字符串也被删除了。有什么想法吗?
编辑:
我使用http://jsonlint.com/解码来自http://pad.skyozora.com/data/pets.json的json。它停在这里:
[
161,
"進化的紅面具",
0,
-1,
0,
-1,
1,
1,
10,
50,
1,
0,
0,
0,
0,
[
],
[
0,
0,
0,
0,
0,
0,
0
],
"http:\/\/i.imgur.com\/Y1jZlGW.png",
[
"ウルカヌ火山",
"メジェド
并告诉我错误:
Parse error on line 5001:
...山", "メジェド
----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
但我看不出这部分json有任何问题。
答案 0 :(得分:6)
返回错误代码4是由JSON_ERROR_SYNTAX
引起的,你必须尝试修复你的json。
如果您在浏览器中转到该网址,则可以看到以下消息:
bad character in string literal at line 1 column 294388