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 相关文章推荐
PHP4 与 MySQL 交互使用
Oct 09 PHP
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
PHP开发中常用的8个小技巧
Aug 27 PHP
用php来改写404错误页让你的页面更友好
Jan 24 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
Jun 21 PHP
php比较两个字符串长度的方法
Jul 13 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
PHP访问数据库集群的方法小结
Mar 14 PHP
php中序列化与反序列化详解
Feb 13 PHP
Ubuntu 16.04下安装PHP 7过程详解
Mar 28 PHP
浅谈PHP中类和对象的相关函数
Apr 26 PHP
php实现微信公众号创建自定义菜单功能的实例代码
Jun 11 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
下载文件的点击数回填
2006/10/09 PHP
php google或baidu分页代码
2009/11/26 PHP
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
php调用mysql数据 dbclass类
2011/05/07 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
PHP线程的内存回收问题
2016/07/08 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
Vue项目利用axios请求接口下载excel
2020/11/17 Vue.js
[46:57]EG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
静态变量和实例变量的区别
2015/07/07 面试题
C++程序员求职信范文
2014/04/14 职场文书
社区志愿者活动方案
2014/08/18 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS