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 相关文章推荐
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
解析PHP正则提取或替换img标记属性
Jun 26 PHP
PHP图片库imagemagick安装方法
Sep 23 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
php+mysql实现无限级分类
Nov 11 PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 PHP
Yii控制器中filter过滤器用法分析
Jul 15 PHP
PHP打印输出函数汇总
Aug 28 PHP
PHP封装的PDO数据库操作类实例
Jun 21 PHP
总结PHP中初始化空数组的最佳方法
Feb 13 PHP
YII框架页面缓存操作示例
Apr 29 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 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加密解密的代码
2007/07/16 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
CodeIgniter模板引擎使用实例
2014/07/15 PHP
smarty简单分页的实现方法
2014/10/27 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
Django 静态文件配置过程详解
2019/07/23 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
linux面试题参考答案(10)
2016/10/26 面试题
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
Java文件和目录(IO)操作
2014/08/26 面试题
小学生自我鉴定
2013/10/12 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
2014年保管员工作总结
2014/11/18 职场文书
博士导师推荐信
2015/03/25 职场文书
2015年路政工作总结
2015/05/22 职场文书
运动会通讯稿50字
2015/07/20 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL