【踩坑记录】这或许是最全的 PHP 中 使用 json_decode后返回null的解决办法

遇到的问题:PHP 中 使用 json_decode后(此时使用的是json_decode($testMsg,true)所以并不存在返回的不是数组而是对象的问题),使用var_dump()函数查看的时候返回null,并且使用gettype()同样返回null。 问题分析: 出现这个问题主要是以下几种原因: 一,UTF-8 BOM:①通常返回的json数据为字符串数据,会出现UTF8 BOM(0xEF 0xBB 0xBF)。②如果你在本地使用windows下的记事本编辑demo.json文件,“可能”也会出现BOM(此处可能打了引号,意思就是也可能不出现BOM,真是一个奇怪的问题!)因此在调用数据的时候会出现BOM头输出! 问题一的解决办法:substr($testMsg, 3),也可以使用preg_replace(‘/[\x00-\x1F\x80-\xFF]/‘, ‘’, $json_string); 二,JSON字符串中的反斜杠被转义(此部分来源:https://www.cnblogs.com/dee0912/p/4175151.html) 问题二的解决办法: ①:使用htmlspecialchars_decode()函数处理,例如:$content = htmlspecialchars_decode($testMsg); ②:在保存 json 数据时使用 urlencode() 函数:$content = urlencode(json_encode($content));解析时使用 urldecode() 函数:$content = urldecode($content);即可避免反斜杠转义造成的无法解析。 三,JSON数据格式错误。①:用单引号包括元素。②:最后元素后面有“,”(英文逗号)。③:JSON数据没有使用UTF-8编码。④:元素间有空格,\n,\r。 问题三的解决办法:前三种就不用细说,④的解决办法就是str_replace(‘ \n\r’,’’,$testMsg)(注:此处并非正确PHP语法,请自行替换)也可以使用html_entity_decode()作用是把 HTML 实体转换为字符; 四,出现多余反斜杠 问题四的解决办法:stripslashes()删除多余反斜杠 五:末尾出现默认的“\0”【最神齐的一种】(此部分来源:https://my.oschina.net/clownfish/blog/50586) 有的服务端程序使用的是C写的,恰巧以“\0”结尾,所以也会出现null。 问题五的解决办法:str_replace(‘\0’,’’,$testMsg);   问题的快速发现方法:json_last_error() 可以列出你最近一次json出现问题的“问题序号” json_last_error错误msg对照表:

返回一个整型(integer),这个值会是以下的常量之一:(此处内容来自:http://php.net/manual/zh/function.json-last-error.php

JSON 错误码

常量

含义

可用性

JSON_ERROR_NONE

没有错误发生

JSON_ERROR_DEPTH

到达了最大堆栈深度

JSON_ERROR_STATE_MISMATCH

无效或异常的 JSON

JSON_ERROR_CTRL_CHAR

控制字符错误,可能是编码不对

JSON_ERROR_SYNTAX

语法错误

JSON_ERROR_UTF8

异常的 UTF-8 字符,也许是因为不正确的编码。

PHP 5.3.3

JSON_ERROR_RECURSION

One or more recursive references in the value to be encoded

PHP 5.5.0

JSON_ERROR_INF_OR_NAN

One or more NAN or INF values in the value to be encoded

PHP 5.5.0

JSON_ERROR_UNSUPPORTED_TYPE

指定的类型,值无法编码。

PHP 5.5.0

JSON_ERROR_INVALID_PROPERTY_NAME

指定的属性名无法编码。

PHP 7.0.0

JSON_ERROR_UTF16

畸形的 UTF-16 字符,可能因为字符编码不正确。

PHP 7.0.0

根据上述返回值进行问题排查更快捷! 希望这篇文章对你有所帮助。并且此处强烈推荐JSON数据格式正误判断网站:http://www.bejson.com/ ——2019.2.22日凌晨 by:WICOS


【踩坑记录】这或许是最全的 PHP 中 使用 json_decode后返回null的解决办法
https://www.wicos.me/jishu/571/
作者
Wicos
发布于
2019年2月21日
许可协议