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 相关文章推荐
PHP合并数组+与array_merge的区别分析
Aug 01 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
Nov 01 PHP
php实现统计邮件大小的方法
Aug 06 PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 PHP
PHP中使用imagick生成PSD文件缩略图教程
Jan 26 PHP
php写入数据到CSV文件的方法
Mar 14 PHP
PHP 前加at符合@的作用解析
Jul 31 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
Oct 29 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
Yii2.0框架模型多表关联查询示例
Jul 18 PHP
PHP7新特性
Mar 09 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自动跳转中英文页面
2008/07/29 PHP
PHP读取XML值的代码(推荐)
2011/01/01 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
JS+CSS实现仿msn风格选项卡效果代码
2015/10/22 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
python字符串的方法与操作大全
2018/01/30 Python
Python中logging.NullHandler 的使用教程
2018/11/29 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
Python爬虫开发与项目实战
2020/12/16 Python
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
物理系毕业生自荐信
2013/11/01 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
如何写求职信
2014/05/24 职场文书
酒后驾车标语
2014/06/30 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
angular异步验证器防抖实例详解
2022/03/31 Javascript