无法解码 php 中的 dota 项目架构 json

Unable to decode dota item schema json in php

我最近按照本指南获得了 Dota 2 物品架构:http://roshpit.ghost.io/getting-updated-item-schema-for-dota2-despite-app570econ-api-being-down-for-5-months/

由于文件非常大,每次我尝试使用 json 验证器(例如 JSONLint)对其进行验证时,它们都会停止响应。它看起来像 json,根据指南应该是 json。我的问题是,当我在 PHP 中使用 json_decode() 时,它最终 return 为 null 或空。

我的猜测是它包含某种类型的字符,PHP 不支持它,因此导致它 return 为 null。我读了一些关于 UTF8 BOM 的内容,但我不确定这是否是问题所在。

谁能帮我找出问题所在?

我已经使用 var_dump() 来确保我试图解码的对象的内容确实有一些东西。

我还尝试使用以下 php 函数删除 UTF8 BOM 个字符

function remove_utf8_bom($text)
{
     $bom = pack('H*','EFBBBF');
     $text = preg_replace("/^$bom/", '', $text);
     return $text;
}

我还尝试使用此 awk 脚本删除 UTF8 BOM 个字符

awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}{print}' INFILE > OUTFILE

UTF8 BOM 次删除似乎都没有任何效果。

以下是有问题的 json 文件:

Original JSON obtained through guide listed above

我最终通过使用 json_last_error() 找出显示的错误来解决问题。结果是5,是UTF8错误。这意味着我最初对UTF8格式的想法是错误的,但我之前没有正确修复它。最后,我只是用下面的方法来修复它:

json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', file_get_contents("items_game.json")), true );

这基本上只是摆脱了尝试解码文件时不应该存在的所有 UTF8 字符。