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 相关文章推荐
新版mysql+apache+php Linux安装指南
Oct 09 PHP
15个小时----从修改程序到自己些程序
Oct 09 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
PHP 第三节 变量介绍
Apr 28 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
May 09 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
thinkPHP实现将excel导入到数据库中的方法
Apr 22 PHP
laravel 实现登陆后返回登陆前的页面方法
Oct 03 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
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
Python Flask框架扩展操作示例
2019/05/03 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
python标准库OS模块详解
2020/03/10 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
python实现ping命令小程序
2020/12/28 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
决定成败的关键——创业计划书
2014/01/24 职场文书
销售人员自我评价
2014/02/01 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
单位收入证明范本
2015/06/18 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
详解redis在微服务领域的贡献
2021/10/16 Redis