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编码规范-php coding standard
Mar 16 PHP
smarty的保留变量问题
Oct 23 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
Nov 01 PHP
php变量范围介绍
Oct 15 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
PHP5多态性与动态绑定介绍
Apr 03 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
Apr 17 PHP
PHP与Java对比学习日期时间函数
Jul 03 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
PHP使用第三方即时获取物流动态实例详解
Apr 27 PHP
使用laravel的migrate创建数据表的方法
Sep 30 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模拟SQL Server的两个日期处理函数
2006/10/09 PHP
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
PHP中的日期加减方法示例
2014/08/21 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
python pandas 如何替换某列的一个值
2018/06/09 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
Python发展史及网络爬虫
2019/06/19 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
python下载库的步骤方法
2019/10/12 Python
python实现登录与注册系统
2020/11/30 Python
Python实现简单的2048小游戏
2021/03/01 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
四年的个人工作自我评价
2013/12/10 职场文书
2014国培学习感言
2014/03/05 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
高中美术教学反思
2016/02/17 职场文书
幼儿园语言教学反思
2016/02/23 职场文书
Golang入门之计时器
2022/05/04 Golang