【踩坑记录】这或许是最全的 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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇