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));
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 存储结构二叉树

    存储结构二叉树

  • java 多线程yield

    java 多线程yieldpackagecom.lhj.java;publicclassTest{publicstaticvoidmain(String[]args)throwsException{RRRt1=newRRR(“t1”);RRRt2=newRRR(“t2”);

  • Windows 10版本business_editions和consumer_editions的区别?「建议收藏」

    Windows 10版本business_editions和consumer_editions的区别?「建议收藏」Windows10版本business_editions和consumer_editions的区别?【答1】二者都内置专业版,不同之处在于:consumer_editions版本包含:Home(家庭版);Education(教育版);Professional(专业版);business_editions版本包含:Education(教育版);Enterprise(企业版);Pro…

    2022年10月28日
  • python安装的库在pycharm不显示_pycharm上无法安装各种库

    python安装的库在pycharm不显示_pycharm上无法安装各种库在使用pycharm安装库总是出现安装不成功的提示‘Non-zeroexitcode(2)’错误提示:最后找了很多方法都不能安装成功,最后发现可以降级pip就可以步骤:1、点击Terminal2、在里面输入“python-mpipinstallpip==20.2.4”对pip进行降级3、重新安装你需要的库或者模块…

  • 关于基于密度的聚类方法_凝聚聚类算法

    关于基于密度的聚类方法_凝聚聚类算法本文原作者:微信公众号“燕哥带你学算法”团队的祝烨博士,目前在墨尔本从事博士后研究。“Theobservationofandthesearchforsimilaritiesanddifferencesarethebasisofallhumanknowledge.”——ALFREDB.NOBEL“人类所有知识的基础就是观察和寻找相似与相异”——阿尔弗雷德·伯

  • virus.win32.parite.h病毒查杀

    virus.win32.parite.h病毒查杀virus.win32.parite.h病毒查杀第一步,病毒不会无缘无故的出现,一般是有病毒下载器(通常蛰伏在流氓软件中),或者是有后门病毒将这些病毒下载下来。用优化大师或金山或360都行,流氓软件清除工具(360插件扫描和***查杀中部分选项,注意不要一下子处理威胁,要选择流氓软件、后门项目处理)第二步,要下载两个专杀(绿盟有打包的,也可以自己一个个找)1、北信源Win32…

发表回复

您的电子邮箱地址不会被公开。

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