PHP json_decode返回错误代码4

时间:2015-03-29 05:45:23

标签: php json string character-encoding json-deserialization

我之前曾问过同样的问题。我想从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有任何问题。

1 个答案:

答案 0 :(得分:6)

返回错误代码4是由JSON_ERROR_SYNTAX引起的,你必须尝试修复你的json。

如果您在浏览器中转到该网址,则可以看到以下消息:

bad character in string literal at line 1 column 294388