php对json字符串解码使用json_decode()函数,第一个参数传字符串,第二个参数若为true,返回array;若为false,返回object。如果返回NULL,说明报错,输出json_last_error(),得到的整数值对应错误提示。如下图所示:
可能会遇到的情况:
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,必须替换