web-dev-qa-db-ja.com

PHP json_decodeはエラーコード4を返します

私は以前に同じ質問をしていました。 jsonを次の場所からデコードしたいと思います: http://pad.skyozora.com/data/pets.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リターンにUTF8DOMがあることがわかります。私は同様の質問からの答えを試しました: json_decodeはWebサービス呼び出しの後にNULLを返します 、しかしすべての答えが私のために機能するわけではありません。

そして、さらに調査を行った後、私はうまくいく方法を見つけました:

<?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/ を使用してjsonを http://pad.skyozora.com/data/pets.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のこの部分には問題は見られませんでした。

7
Patrick Ng

戻りエラーコード4は、JSON_ERROR_SYNTAXが原因です。jsonの修正を試みる必要があります。

ブラウザでURLにアクセスすると、次のメッセージが表示されます。

bad character in string literal at line 1 column 294388 
7