私は以前に同じ質問をしていました。 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のこの部分には問題は見られませんでした。
戻りエラーコード4は、JSON_ERROR_SYNTAX
が原因です。jsonの修正を試みる必要があります。
ブラウザでURLにアクセスすると、次のメッセージが表示されます。
bad character in string literal at line 1 column 294388