我最近按照本指南获得了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()
时,它最终返回null或空。
我的猜测是它包含了PHP不支持的某种类型的字符,从而导致它返回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文件:
答案 0 :(得分:0)
我最终通过使用json_last_error()
找出显示的错误来解决问题。结果是5,这是一个UTF8错误。这意味着我对UTF8格式的原始想法不正确,但我以前没有正确修复它。最后,我最后使用以下内容来修复它:
json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', file_get_contents("items_game.json")), true );
这基本上只是摆脱了尝试解码文件时不应该出现的所有UTF8字符。