Недавно я получил схему элементов Dota 2, следуя этому руководству: http://roshpit.ghost.io/getting-updated-item-schema-for-dota2-despite-app570econ-api-being-down-for-5-months/
Поскольку файл действительно большой, каждый раз, когда я пытаюсь проверить его с помощью JSON-верификаторов, таких как JSONLint, они перестают отвечать. Это выглядит как правильный json, и, согласно руководству, это должен быть правильный json. Моя проблема в том, что когда я использую json_decode()
в PHP он возвращает нулевое или пустое значение.
Я предполагаю, что он включает в себя некоторый тип символов, который не поддерживается PHP, и поэтому он возвращает ноль. Я прочитал что-то относительно UTF8 BOM
, но я не уверен, что это проблема.
Может ли кто-нибудь помочь мне определить, что с ним не так?
я использовал var_dump()
чтобы убедиться, что содержимое объекта, который я пытаюсь декодировать, действительно содержит что-то.
Я также пытался удалить UTF8 BOM
символы с помощью следующей функции PHP
function remove_utf8_bom($text)
{
$bom = pack('H*','EFBBBF');
$text = preg_replace("/^$bom/", '', $text);
return $text;
}
И я также попытался удалить UTF8 BOM
персонажи, использующие этот скрипт awk
awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}{print}' INFILE > OUTFILE
Ни один из UTF8 BOM
казалось, что абсорбция имела какой-либо эффект.
Ниже приводится описание файла json:
Оригинал JSON, полученный с помощью руководства, указанного выше
Я решил проблему, сначала узнав, какая ошибка отображалась при использовании json_last_error()
, Оказалось 5, что является ошибкой UTF8. Это означает, что моя первоначальная мысль о форматировании UTF8 была неверной, но я раньше не исправлял ее должным образом. В конце я просто использовал следующее, чтобы исправить это:
json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', file_get_contents("items_game.json")), true );
Это в основном просто избавило от всех символов UTF8, которых не должно было быть при попытке декодировать файл.
Других решений пока нет …