Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php json_解码行为不可预测_Php_Parsing_Utf 8_Json - Fatal编程技术网

Php json_解码行为不可预测

Php json_解码行为不可预测,php,parsing,utf-8,json,Php,Parsing,Utf 8,Json,我正在用php构建一个公共API,在json\u decode()方面遇到了一个非常奇怪的问题。我带来了一大串动态生成的JSON,在这个过程中遇到了很多麻烦。我试图像这样加载JSON对象: $all_related_users_obj = json_decode($this->get_related_users_raw_JSON($user_id)); if(is_object($all_related_users_obj)) echo $all_related_users_obj->

我正在用php构建一个公共API,在
json\u decode()
方面遇到了一个非常奇怪的问题。我带来了一大串动态生成的JSON,在这个过程中遇到了很多麻烦。我试图像这样加载JSON对象:

$all_related_users_obj = json_decode($this->get_related_users_raw_JSON($user_id));
if(is_object($all_related_users_obj)) echo $all_related_users_obj->tags[0]->first_name;
else echo "NOT AN OBJECT";
我发现这适用于我传递的大约一半的
$user\u id
整数,但不适用于其余整数。通常我会假设我的JSON格式不正确,但根据我所有的JSON格式都是正确的

我举了一个JSON文件示例,该文件正确加载到
$all_related_users_obj
中,而另一个则没有

使用
json\u last\u error()
函数,我接收到
json\u error\u UTF8
声明json包含格式错误的UTF-8字符,可能编码不正确。然而,我仍然找不到错误

非常感谢您的帮助。

在您的“不工作”示例中,JSON中隐藏的关键之一是:

"city":"Rezé",
它包含非ASCII字符
é
。JSON很可能是以非UTF8编码(可能是ISO8859-1)的形式提交的,这使得
JSON\u decode()
barf.

在您的“不工作”示例中,深埋在JSON中的一个键是:

"city":"Rezé",

它包含非ASCII字符
é
。JSON很可能是以非UTF8编码(可能是ISO8859-1)的形式提交的,这使得
JSON\u decode()
barf.

我没有阅读所有的JSON。把它们放到一个不同的工具中。@IgnacioVazquez Abrams你是说用gist以外的东西发布它们吗?我也尝试过。@IgnacioVazquez Abrams我使用了您提供的链接,但JSON值不同,因此它表明许多事情是不同的。此外,如果我将一个给我带来问题的JSON字符串硬编码到我的php中,那么它
JSON\u decode()
s就正确了……我没有通读所有的JSON。把它们放到一个不同的工具中。@IgnacioVazquez Abrams你是说用gist以外的东西发布它们吗?我也尝试过。@IgnacioVazquez Abrams我使用了您提供的链接,但JSON值不同,因此它表明许多事情是不同的。此外,如果我将一个给我带来问题的JSON字符串硬编码到我的php中,它
JSON\u decode()
s就正确了……非常感谢。很抱歉你不得不读到。。。我将使用
$input=iconv('UTF-8','UTF-8//IGNORE',utf8\u encode($input))
来解决这个问题。+1用于读取26655个字符来找到它。虽然我怀疑你没有。不过还是+1。@PhpMyCoder:是的,我没有那么耐心。粘贴到vim中,搜索
[^-~]
以匹配所有不可打印的ASCII字符。非常感谢。很抱歉你不得不读到。。。我将使用
$input=iconv('UTF-8','UTF-8//IGNORE',utf8\u encode($input))
来解决这个问题。+1用于读取26655个字符来找到它。虽然我怀疑你没有。不过还是+1。@PhpMyCoder:是的,我没有那么耐心。粘贴到vim中,搜索
[^-~]
以匹配所有不可打印的ASCII字符。