php使用json_encode对变量json编码


Posted in PHP onApril 07, 2014

在 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'
};
PHP 相关文章推荐
?繁体转换的class
Oct 09 PHP
坏狼php学习 计数器实例代码
Jun 15 PHP
php 获取本机外网/公网IP的代码
May 09 PHP
php.ini 配置文件的深入解析
Jun 17 PHP
PHP开发框架kohana3 自定义路由设置示例
Jul 14 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
Dec 04 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
Jan 30 PHP
PHP获取文件扩展名的4种方法
Nov 24 PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
php中file_get_contents()函数用法实例
Feb 21 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 27 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 #PHP
PHP中的Memcache详解
Apr 05 #PHP
PHP中使用memcache存储session的三种配置方法
Apr 05 #PHP
PHP包含文件函数include、include_once、require、require_once区别总结
Apr 05 #PHP
PHP6 中可能会出现的新特性预览
Apr 04 #PHP
php实现水仙花数示例分享
Apr 03 #PHP
PHP抓取、分析国内视频网站的视频信息工具类
Apr 02 #PHP
You might like
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
yii框架无限极分类的实现方法
2017/04/08 PHP
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
2020/06/01 Javascript
原生JS实现天气预报
2020/06/16 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
js实现随机点名
2021/01/19 Javascript
详解matplotlib绘图样式(style)初探
2021/02/03 Python
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
人事部岗位职责范本
2014/03/05 职场文书
党组织公开承诺书
2014/03/29 职场文书
小学生新年寄语
2014/04/03 职场文书
计划生育工作总结2015
2015/04/03 职场文书
名人传读书笔记
2015/06/26 职场文书
六五普法学习心得体会
2016/01/21 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
HTML+JS实现在线朗读器
2022/02/15 Javascript