首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >php 中json_encode,json_decode问题总结

php 中json_encode,json_decode问题总结

作者头像
全栈程序员站长
发布2022-08-09 19:02:58
发布2022-08-09 19:02:58
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

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

json_encode值中大括号与花括号区别

1.当array是一个从0开始的连续数组时,json_encode出来的结果是一个由[]括起来的字符串 而当array是不从0开始或者不连续的数组时,json_encode出来的结果是一个由{}括起来的key-value模式的字符串

代码语言:javascript
代码运行次数:0
运行
复制
$test = array();
$test[] = 1;
$test[] = 1;
$test[] = 1;
echo json_encode($test);

结果:

[1,1,1]

代码语言:javascript
代码运行次数:0
运行
复制
$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

事例:

代码语言:javascript
代码运行次数:0
运行
复制
<?php
$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要求的字符串比较严格
  1. 使用UTF-8编码
  2. 不能在最后元素有逗号
  3. 不能使用单引号
  4. 不能有\r,\t,如果有请替换

解决方案

一、bom头问题

json字符串中的BOM头是不可见字符,某些编辑器默认会加上BOM头。

代码语言:javascript
代码运行次数:0
运行
复制
<?php
$info = json_decode(trim($info,chr(239).chr(187).chr(191)),true);

二、语法错误

使用 json_last_error() 函数打印一下错误,页面显示4,也就是语法错误。

代码语言:javascript
代码运行次数:0
运行
复制
<?php
echo $errorinfo = json_last_error(); //输出4 语法错误

出现这个问题是因为在 json 字符串中反斜杠被转义, 只需要用 htmlspecialchars_decode() 函数处理一下 $info即可:

代码语言:javascript
代码运行次数:0
运行
复制
$info= htmlspecialchars_decode($info);

三、其他破坏json字符串的字符

代码语言:javascript
代码运行次数:0
运行
复制
<?php
 $info=  preg_replace('/[\x00-\x1F\x80-\x9F]/u', '', trim($info));

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • json_encode值中大括号与花括号区别
  • json_encode 中文不转码
  • json_decode要求的字符串比较严格
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档