文档章节

json_encode , json 还是数组?(转)

zyt_1978
 zyt_1978
发布于 2016/06/19 19:19
字数 520
阅读 20
收藏 0
点赞 0
评论 0

在 ajax 横行的今天,json 顺理成章地成为了前后端交互一个极其重要的工具。对于 PHP 来说,通常使用 json_encode 方法将一个 PHP 组数,转换成前端可以解析的 json 字符串,这也是 PHP 手册上描述的内容,但事实是这样的吗?看看下面这段代码:

$a = array( 'Jack' , 'Sam' , 'Tom' );
    echo json_encode( $a );

当 JavaScript 请求到上面的代码,PHP 将解析数组 $a 为 json 字符串并返回到前端,但事实上在前端拿到的返回结果却是一个数组。

[ "Jack" ,  "Sam" ,  "Tom" ]

这个结果对于前端来说也许并不是所期望的,对于 JavaScript 来说,数组和 json 的关系非常密切,甚至可以简单地把 json 理解为关联数组,但这并不意味着二者可以划等号,比如 json 没有 length 属性,也不能进行数字索引,json 是键值对,而 JavaScript 的数组严格说来是没有"键"的,这和 PHP 的差异比较大。那么为什么 json_encode 的返回结果是数组呢?

本文开头的 PHP 代码中的数组是严格意义上的数字索引数组,json_encode 方法在处理这样的数组的时候会返回数组字符串,它需要同时满足两个条件:1. 数字索引数组,2. 索引值从 0 开始。这意味着下面的代码也会返回同样的结果:

$b = array(
        '0' => 'Jack',
        '1' => 'Sam',
        '2' => 'Tom'
    );
    echo json_encode( $b );

这两个条件的任意一个没有获得满足,那么 json_encode 方法才真正的返回 json 字符串:

$c = array(
        'person-1' => 'Jack',
        'person-2' => 'Sam',
        'person-3' => 'Tom'
    );
    echo json_encode( $c );

这时前端得到的结果如下:

{
        'person-1' : 'Jack',
        'person-2' : 'Sam',
        'person-3' : 'Tom'
    };

这篇文章主要是说明 json_encode 使用时一个需要注意的细节,无论返回的是数组还是 json,都不代表这一定就是个错误的返回结果,当前端需要的数组时,数组就是正确的结果,反之亦然。

本文转载自:http://www.cnblogs.com/xmphoenix/archive/2011/05/15/2046883.html

共有 人打赏支持
zyt_1978
粉丝 8
博文 166
码字总数 21058
作品 0
程序员
解决json_encode中文UNICODE转码问题

用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”u***”的格式,如果想汉字不进行转码,这里提供三种方法 1.升级PHP,在PHP5.4, 这个问题终于得以解决, Json新增了...

grushy
2014/10/21
0
0
php生成返回json对象数组(json支持中文)

php生成返回json对象数组 改下 你会发现上面虽然我页面和传入字符对定义了为UTF-8,为什么生成的json数据还是乱码: "name":"u4e2du56fd"..... 现在想办法将这串不知道什么的转为中文: 解决...

技术小胖子
2017/10/31
0
0
PHP 输出中文 JSON 字符串

PHP 和 JavaScript 交互其实很方便,PHP 原生也提供了对 JSON 格式的支持。主要包括 JSON 编码和解码两个函数: 1 jsonendoce: http://cn.php.net/jsonencode 2 jsondedoce: http://cn.php.n...

cnu2m
2014/10/21
0
0
最近获得的新技能,和旧知识的巩固/json,php的数组问题

最近做一个图标显示,需要在js中使用ajax返回的数组,因此开始对json进一步了解 1. 先说将php多维数组的for定义,和php数组转为json数据包,这样下面说js使用json也好说 1.1 多维数组定义: ...

issac宝华
2016/01/30
7
0
PHP json_encode 处理汉字为空 服务端JSON汉字编码

PHP json_encode 处理汉字为空 服务端JSON汉字编码 原因是这个汉字是gbk编码 , json只能处理utf-8的编码 ,所以要先将数据转码 用Extjs接收PHP服务端返回的Json结果时,发现只要是汉字(从S...

李佳顺
2014/07/24
0
1
PHP多种序列化/反序列化的方法

serialize和unserialize函数 这两个是序列化和反序列化PHP中数据的常用函数。 当数组值包含如双引号、单引号或冒号等字符时,它们被反序列化后,可能会出现问题。为了克服这个问题,一个巧妙...

京牛教育科技
2016/08/27
9
2
PHP 序列化变量的 4 种方法

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。 1. s...

mickelfeng
2013/01/12
0
1
PHP多种序列化/反序列化的方法

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。 1. s...

cnu2m
2012/11/08
0
0
在PHP语言中使用JSON

从5.2版本开始,PHP原生提供jsonencode()和jsondecode()函数,前者用于编码,后者用于解码。 一、json_encode() 该函数主要用来将数组和对象,转换为json格式。先看一个数组转换的例子: $a...

晨曦之光
2012/03/09
245
0
encode_json转数组问题

$array = array( '0' =>'测试1', '1' =>'测试2', '2' =>'测试3', ); encode_json($array); //转成正确数组 $array = array( '1' =>'测试1', '2' =>'测试2', '3' =>'测试3', ); encode_jso......

Deacyn
2014/11/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python爬虫 爬取百合网的女人们和男人们

学Python也有段时间了,目前学到了Python的类。个人感觉Python的类不应称之为类,而应称之为数据类型,只是数据类型而已!只是数据类型而已!只是数据类型而已!重要的事情说三篇。 据书上说...

p柯西
13分钟前
0
0
在Java中,你真的会日期转换吗

1.什么是SimpleDateFormat 在java doc对SimpleDateFormat的解释如下: SimpleDateFormatis a concrete class for formatting and parsing dates in a locale-sensitive manner. It allows fo......

Java小铺
22分钟前
0
0
Linux系统梳理---系统搭建(二):tomcat的安装和使用

上一章讲到JDK的安装使用,这一章主要记录下服务器tomcat的安装以及部署一个项目. 1.下载tomcat,这里下载的是apache-tomcat-8.5.32.tar.gz 2.创建文件夹,便于管理,和JDK一样,在usr目录下创建t...

勤奋的蚂蚁
33分钟前
0
0
ES15-聚合

1.Terms Aggregation 分组聚合 2.Filter Aggregation 过滤聚合

贾峰uk
34分钟前
0
0
【2018.07.19学习笔记】【linux高级知识 20.27-20.30】

20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数

lgsxp
36分钟前
0
0
10.32/10.33 rsync通过服务同步~10.35 screen工具

通过服务的方式同步要编辑配置文件:[root@linux-xl ~]# vim /etc/rsyncd.confport=873log file=/var/log/rsync.logpid file=/var/run/rsyncd.pidaddress=192.168.43.21[tes...

洗香香
40分钟前
0
0
与女儿谈商业模式 (3):沃尔玛的成功模式

分类:与女儿谈商业模式 | 标签: 经济学 沃尔玛 陈志武 2007-05-10 09:09阅读(11279)评论(30) 与女儿谈商业模式 (3):沃尔玛的成功模式 陈志武 /文 沃尔玛(Wal-Mart)是另一个有意思的财...

祖冲之
46分钟前
0
0
网页加载速度优化方法总结

1、减少请求 最大的性能漏洞就是一个页面需要发起几十个网络请求来获取诸如样式表、脚本或者图片这样的资源,这个在相对低带宽和高延迟的移动设备连接上来说影响更严重。 2、整合资源 对开发...

Jack088
52分钟前
0
0
dubbo学习

https://blog.csdn.net/houshaolin/article/details/76408399

喵五郎
今天
0
0
mybatis-session.selectList源码分析

0.构建工厂:SqlSessionFactory 。 new SqlSessionFactoryBuilder.build(配置的xml文件) 获取sqlSession对象 //指定事务隔离级别 1. sqlMapper.openSession(TransactionIsolationLevel.SER......

writeademo
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部