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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vmware系统安装教程_vmware安装虚拟机

    vmware系统安装教程_vmware安装虚拟机一、VMware安装所安装的版本为VMware15链接:https://pan.baidu.com/s/1vzaS4PL2e0XNis-P-M-o4A&shfl=sharepset提取码:7r3d新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计,将会带来全新的写…

    2022年8月16日
    2
  • SAXreader「建议收藏」

    SAXreader「建议收藏」packagecom.joyveb.addon.hp;importjava.io.StringReader;importorg.dom4j.Document;importorg.dom4j.DocumentException;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;publicclassSni…

    2022年6月29日
    25
  • xampp linux_xampp安装出错

    xampp linux_xampp安装出错xampp是一套很好使用的web服务器组合软件,这里教大家如何在linux安装搭建xampp,希望能帮助到你首先下载xampp安装包Linux版xampp-linux-1.8.3.5-install.run用root用户登录到Linux系统,不是root用户的,用su命令切换下windows系统下百度搜索xampp,下载完成后可以用SSH工具将下载的文件上传到Linux系统中linux系统下,可以…

    2025年6月9日
    1
  • lasso回归-回归实操

    lasso回归-回归实操pythonlasso回归算法之回归实操基本概念正则化正则化是指对模型做显式约束,以避免过拟合。本文用到的lasso回归就是L1正则化。(从数学的观点来看,lasso惩罚了系数向量的L1范数,换句话说,就是系数的绝对值之和。)正则化的具体原理就不在这里多叙述了,感兴趣的朋友可以看一下这篇文章:机器学习中正则化项L1和L2的直观理解。算法简介lasso回归在了解lasso回归之前,建议朋友们先对普通最小二乘法和岭回归做一些了解,可以参考这两篇文章:最小二乘法-回归实操,岭回归-回归实操。除了

    2022年5月8日
    59
  • OpenCV-Python实战(1)——OpenCV简介与图像处理基础

    OpenCV-Python实战(1)——OpenCV简介与图像处理基础OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时也提供了Python接口,实现了图像处理和计算机视觉方面的很多通用算法。在本文中,将介绍OpenCV库,包括它的主要模块和典型应用场景,同时使用OpenCV-Python实战讲解图像处理基础要点。

    2022年5月13日
    42
  • webstorm激活码【2021免费激活】[通俗易懂]

    (webstorm激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日
    516

发表回复

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

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