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


相关推荐

  • linux防火墙配置命令_linux防火墙规则设置

    linux防火墙配置命令_linux防火墙规则设置一、实验要求1.不允许外网不经过防火墙与内网进行通信2.允许内网用户通过防火墙访问外部HTTP、HTTPS服务器3.允许内网用户通过防火墙访问外部FTP服务器二、实验环境1.使用两台Linux虚拟机和一台win10物理机。一台Linux主机作为网关(需要双网卡),另一台Linux主机作为内网,使用物理机作为外网。2.我使用的是RedHat6.5版本。RedHat7及…

    2022年9月22日
    2
  • elasticsearch painless脚本使用(附demo及painless API)

    Kibana提供了一些强大的方法,用于搜索和可视化Elasticsearch中存储的数据。为了实现可视化,Kibana会搜索Elasticsearchmapping中定义的field,并以图表的形式将它们作为选项呈现给用户。但是,如果你忘记在schema中将一个重要的值定义为单独的field会怎么样呢?或者,如果你想把两个field合并到一起该怎么办呢?这时就可以使用

    2022年4月7日
    288
  • 可以识别图片上的文字的小程序

    可以识别图片上的文字的小程序微信上的小程序相信大家都不陌生,近年来,微信小程序从“跳一跳”之后,越发火了。由于小程序的出现,微信上的功能也逐渐增加了,今天就给大家介绍一个小程序,比较实用,它可以快速识别图片上的文字,这个小程序呢就叫“迅捷文字识别”。这是一个比较智能的文字识别的小程序,它可以将识别出来的字汉英互译,还可以直接拍照翻译,接下来就给大家介绍一下这个小程序的操作方法。1.首先,我们现在微信上找到这个程序,点…

    2022年5月29日
    47
  • qt tcpsocket 接收数据_如何给微信好友发送指定位置

    qt tcpsocket 接收数据_如何给微信好友发送指定位置在网络应用中,有时候我们会遇到这样的问题,用TCP不断的接收和发送不同类型的数据,数据大小,格式都不相同,起初看了qt的例子,按照例子写的程序效果相当的不好,尤其是在连续发送大数据的时候,接收端根本无法判断数据是否完整了,也不知道什么时候取读取,经过各种折腾加上看qt源码,总结出了这个方法,发送的时候,要先发送这个数据序列化后的大小,然后发送这个数据本身,接收端,首先收到了要接收数据的大小,心里有

    2025年10月10日
    7
  • python scipy库_micropython移植

    python scipy库_micropython移植SciPy最新官方文档的说明(20190730):Functionsfromscipy.interpolate(spleval,spline,splmake,andspltopp)andfunctionsfromscipy.misc(bytescale,fromimage,imfilter,imread,imresize,imrotate,imsave,i…

    2022年10月14日
    4
  • SQL注入基本原理_sql到底怎么注入

    SQL注入基本原理_sql到底怎么注入SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,它目前是黑客对数据库进行攻击的最常用手段之一。

    2025年7月17日
    7

发表回复

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

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