PHP json_decode 解析 json 结果为 NULL 的解决方法

时间:2024-04-09 17:32:30

php对json字符串解码使用json_decode()函数,第一个参数传字符串,第二个参数若为true,返回array;若为false,返回object。如果返回NULL,说明报错,输出json_last_error(),得到的整数值对应错误提示。如下图所示:

PHP json_decode 解析 json 结果为 NULL 的解决方法

可能会遇到的情况:

1.语法错误

json字符串在json_decode之前已不完整,所以语法错误。自己修改了本地json数据可能会报这个错,还有可能客户端提交的个别字符影响了json的格式,可以使用JS进行过滤,可以解决一般问题,主要过滤回车,空格,html标签。

/*
* 过滤函数,在前端使用
*/
function htmlEncode(str) {
  str = str.replace(/s+/ig, '');
  str = str.replace(/&/g, '');
  str = str.replace(/</g, '');
  str = str.replace(/>/g, '');
  str = str.replace(/(?:t| |v|r)*n/g, '<br />');
  str = str.replace(/t/g, '    ');
  str = str.replace(/x22/g, '"');
  str = str.replace(/x27/g, ''');
  str = str.replace(/"/g, "");
  return str;
}

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

json字符串只能是UTF-8编码,所以要转换

$content = mb_detect_encoding($json, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));       //查看编码
$json= mb_convert_encoding($content tent , "UTF-8", "GBK");                //将字符串转为UTF-8

json元素最后不能有逗号(与php的array不同)

json不能使用单引号,必须是双引号

json元素值中间不能有空格和n,必须替换