php 中json_encode,json_decode问题总结

php 中json_encode,json_decode问题总结php 中json_encode,json_decode问题总结

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

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

事例:

<?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头。

<?php
$info = json_decode(trim($info,chr(239).chr(187).chr(191)),true);

二、语法错误

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

<?php
echo $errorinfo = json_last_error(); //输出4 语法错误

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

$info= htmlspecialchars_decode($info);

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

<?php
 $info=  preg_replace('/[\x00-\x1F\x80-\x9F]/u', '', trim($info));
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SQL视图索引

    SQL视图索引在视图上创建索引的另一个好处是:查询优化器开始在查询中使用视图索引,而不是直接在FROM子句中命名视图。这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。有关更多信息,请参见在视图上使用索引。在视图上创建聚集索引可存储创建索引时存在的数据。索引视图还自动反映自创建索引后对基表数据所做的更改,这一点与在基表上创建的索引相同。当对基表中的数据进行更改时,索引视图中

    2022年7月22日
    10
  • labelme使用教程_labelme和labelimg区别

    labelme使用教程_labelme和labelimg区别LabelMe可用于实例分割,语义分割,目标检测,分类任务的数据集标注工作。在线标注版本:http://labelme2.csail.mit.edu/Release3.0/index.php?message=1python版本:https://github.com/wkentaro/labelme分类标注:Classification目标检测标注:ObjectDetection语义分割标注:SemanticSegmentation实例分割标注:InstanceSegmentation视频

    2022年9月12日
    0
  • phpstorm2021.5 激活码[在线序列号]

    phpstorm2021.5 激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    60
  • 第五课:系统目录及ls·文件类型及alias命令介绍

    第五课:系统目录及ls·文件类型及alias命令介绍

    2022年3月12日
    66
  • java hashcode作用yield返回值_对象的hashcode是什么

    java hashcode作用yield返回值_对象的hashcode是什么总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?这就是Object.equals方法了。但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多

    2022年9月8日
    0
  • web图书销售管理系统_图书管理系统的主要功能有哪些?

    web图书销售管理系统_图书管理系统的主要功能有哪些?我们都已经了解到图书管理系统使用带来的好处,那么图书管理系统到底能给图书管理实现哪些功能。1、基础资料商品信息齐全,易学易用商品信息,供货商,客户,员工,仓库等基本参数的设置。支持一品多码管理。可快速检索商品,提高收银效率。可按岗位角色分组、分层、分级进行自定义权限管理。2、采购管理按需采购商商品,节省库存成本系统提出按需采购,市场拉动采购理念,减少库存积压,提高存货流转率。系统按照库存上下限来建…

    2022年6月11日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号