前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >json_decode的结果是null

json_decode的结果是null

作者头像
全栈程序员站长
发布2022-09-09 14:44:21
1.1K0
发布2022-09-09 14:44:21
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

一、前言

突然发现一个接口出了问题,经过排查之后发现是json_decode($str,true)的问题,返回竟然是null。这个问题大家可能都碰到过,出现问题的原因就那么几种,再次记录一下吧

二、原因

1、首先使用json_last_error确定问题

代码语言:javascript
复制
 $arrDataList = json_decode($content, TRUE);
               				 var_dump( json_last_error());

这段代码会打印出来一个数字,不同的数字代表不同的错误,如下:

代码语言:javascript
复制
json_last_error错误msg对照表:
				0 = JSON_ERROR_NONE
				1 = JSON_ERROR_DEPTH
				2 = JSON_ERROR_STATE_MISMATCH
				3 = JSON_ERROR_CTRL_CHAR
				4 = JSON_ERROR_SYNTAX    // 语法错误
				5 = JSON_ERROR_UTF8

我这边打印的结果是4,就是语法错误,明确错误之后继续往下找。

2、常规排错

(1)查看编码

代码语言:javascript
复制
 $content = mb_detect_encoding($jsonStr, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));	
$json= mb_convert_encoding($content tent , "UTF-8", "GBK");                //将字符串转为UTF-8 (在知道字符串是gbk的时候使用,如果字符串已经是utf-8了,不要用这个函数)
$json= mb_convert_encoding($str, "UTF-8", "auto"); //未知原编码,通过auto自动检测后,转换编码为utf-8

无效。

(2)去掉boom头

代码语言:javascript
复制
$jsonArr= json_decode(trim($jsonStr,chr(239).chr(187).chr(191)),true);

无效。

(3) 格式: json字符串必须用双引号包含

代码语言:javascript
复制
$jsonStr,chr= str_replace("'",  '"',  $jsonStr);

无效。

(4)url_decode方式解码

代码语言:javascript
复制
  $jsonStr = urlencode(json_encode($jsonStr));
 $content = urldecode($jsonStr);
	转化的结果不再是null,但是json_decode($content , TRUE);  之后,结果仍为字符串。
	我们的目标是结果是数组,因此失败

无效。

(5)删除反斜杠,防止转义字符

代码语言:javascript
复制
$data = stripslashes(html_entity_decode($info)); 
//$info是传递过来的json字符串
$data = json_decode($data,TRUE);
//这时候$data就是解析后的数组了!
//html_entity_decode() 函数的作用是把 HTML 实体转换为字符。
//stripslashes() 函数的作用是删除反斜杠。

无效。

(6)字符串太多了?250W个字符

根据文档,没有设定字符串的限定,只限定了递归深度,普通的解析深度都不会成为问题。

三、最终问题

在经过一系列的尝试之后,发现以上方法都是无效的,但json数据肯定是不对的。由于这个文件是经过版本控制的,因此查看改文件的修改记录,发现有同事修改过这个文件,导致少了一些东西。少的这部分字符通过以上方式都无法直接解决,直接通过svn还原了,一了百了,世界都安静了。

不过以上的解决方案还是可以参考的,大部分json解析错误都能解决。

end

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160638.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、原因
  • 三、最终问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档