您现在的位置是:首页> 网站开发

json_decode的结果是null

  • 3319人已阅读
  • 时间:2021-09-20 09:04:25
  • 分类:网站开发
  • 作者:祥哥


1、首先使用json_last_error确定问题

$arrDataList = json_decode($content, TRUE);

var_dump( json_last_error());

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

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)查看编码

$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头

$jsonArr= json_decode(trim($jsonStr,chr(239).chr(187).chr(191)),true);


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

$jsonStr,chr= str_replace("'", '"', $jsonStr);


(4)url_decode方式解码

$jsonStr = urlencode(json_encode($jsonStr));

$content = urldecode($jsonStr);

转化的结果不再是null,但是json_decode($content , TRUE); 之后,结果仍为字符串。

我们的目标是结果是数组,因此失败


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

$data = stripslashes(html_entity_decode($info));

//$info是传递过来的json字符串

$data = json_decode($data,TRUE);

//这时候$data就是解析后的数组了!

//html_entity_decode() 函数的作用是把 HTML 实体转换为字符。

//stripslashes() 函数的作用是删除反斜杠。


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

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


以上是常规问题,自己挨个排查吧。


Top