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 相关文章推荐
一个目录遍历函数
Oct 09 PHP
QQ登录 PHP OAuth示例代码
Jul 20 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 PHP
php rsa加密解密使用详解
Jan 14 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
Mar 03 PHP
PHP中使用BigMap实例
Mar 30 PHP
/etc/php-fpm.d/www.conf 配置注意事项
Feb 04 PHP
php+ajax实现异步上传文件或图片功能
Jul 18 PHP
浅谈PHP无限极分类原理
Mar 14 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 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
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
PDO::lastInsertId讲解
2019/01/29 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
python 中的列表解析和生成表达式
2011/03/10 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
python出现"IndentationError: unexpected indent"错误解决办法
2017/10/15 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
python图像和办公文档处理总结
2019/05/28 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
Python接口测试get请求过程详解
2020/02/28 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
JAVA程序员自荐书
2014/01/30 职场文书
竞聘书模板
2014/03/31 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
小学生手册家长意见
2015/06/03 职场文书
MySQL Shell的介绍以及安装
2021/04/24 MySQL
OpenCV实现普通阈值
2021/11/17 Java/Android