json_encode值中大括号与花括号区别
1.当array是一个从0开始的连续数组时,json_encode出来的结果是一个由[]括起来的字符串
而当array是不从0开始或者不连续的数组时,json_encode出来的结果是一个由{}括起来的key-value模式的字符串
$test = array();
$test[] = 1;
$test[] = 1;
$test[] = 1;
echo json_encode($test);
结果:
[1,1,1]
$test = array();
$test[] = 1;
$test[] = 1;
$test[] = 1;
unset($test[0]);
echo json_encode($test);
结果:
{“1”:1,“2”:1}
2.当字符串为[1,1,1] 这种模式时,json_decode默认解析出来的结果是一个数组,
当字符串为{“1”:1,“2”:1} 这种模式时,json_decode默认解析出来的结果是一个对象,此时可以设置它的第二个参数为true强制让它返回数组
3.由于php无法区分一维数组和二维数组,才会出现以上情况,因为使用json编码时推荐将第二个参数设置为true
json_encode 中文不转码
满足条件:
1,文件编码为UTF_8
2,json_encode()的第二个参数填入JSON_UNESCAPED_UNICODE
事例:
$arr = [
'a'=>'不转码',
];
echo json_encode($arr);
echo json_encode($a,JSON_UNESCAPED_UNICODE);
//{"a":"\u4e0d\u8f6c\u7801"}
//{"a":"不转码"}
在使用json_decode函数想把json串转化为数组的时候,出现了null,当时还以为是因为json对字符串的长度有限制,还以为是因为两边少了引号,经过多次处理,发现都没有效果。
json_decode要求的字符串比较严格
使用UTF-8编码
不能在最后元素有逗号
不能使用单引号
不能有\r,\t,如果有请替换
解决方案
一、bom头问题
json字符串中的BOM头是不可见字符,某些编辑器默认会加上BOM头。
$info = json_decode(trim($info,chr(239).chr(187).chr(191)),true);
二、语法错误
使用 json_last_error() 函数打印一下错误,页面显示4,也就是语法错误。
echo $errorinfo = json_last_error(); //输出4 语法错误
出现这个问题是因为在 json 字符串中反斜杠被转义,
只需要用 htmlspecialchars_decode() 函数处理一下 $info即可:
$info= htmlspecialchars_decode($info);
三、其他破坏json字符串的字符
$info= preg_replace('/[\x00-\x1F\x80-\x9F]/u', '', trim($info));
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/135749.html