文档章节

json_encode , json 还是数组?(转)

zyt_1978
 zyt_1978
发布于 2016/06/19 19:19
字数 520
阅读 20
收藏 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
最近获得的新技能,和旧知识的巩固/json,php的数组问题

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

issac宝华
2016/01/30
7
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
PHP多种序列化/反序列化的方法

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

京牛教育科技
2016/08/27
9
2

没有更多内容

加载失败,请刷新页面

加载更多

Mac OS X下Maven的安装与配置

Mac OS X 安装Maven: 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3 打开Terminal,输入以下命令,设置Maven classpath $ vi ~/.bash_profile 添加下列两行代码,之后...

TonyStarkSir
今天
3
0
关于编程,你的练习是不是有效的?

最近由于工作及Solution项目的影响,我在重新学习DDD和领域建模的一些知识。然后,我突然就想到了这个问题,以及我是怎么做的? 对于我来说,提升技能的项目会有四种: 纯兴趣驱动的项目。即...

问题终结者
今天
4
0
打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
4
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部