无法解码php

时间:2015-06-05 04:24:18

标签: php json steam-web-api

我最近按照本指南获得了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文件:

Original JSON obtained through guide listed above

1 个答案:

答案 0 :(得分:0)

我最终通过使用json_last_error()找出显示的错误来解决问题。结果是5,这是一个UTF8错误。这意味着我对UTF8格式的原始想法不正确,但我以前没有正确修复它。最后,我最后使用以下内容来修复它:

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

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