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 相关文章推荐
Fatal error: Call to undefined function curl_init()解决方法
Apr 09 PHP
php各种编码集详解和以及在什么情况下进行使用
Sep 11 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
php数据类型判断函数有哪些
Sep 23 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
php中静态类与静态变量用法的区别分析
Jan 15 PHP
php中return的用法实例分析
Feb 28 PHP
php导入模块文件分享
Mar 17 PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
php进行md5加密简单实例方法
Sep 19 PHP
php操作redis数据库常见方法实例总结
Feb 20 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/08/16 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
JS嵌套函数调用上下文的问题解决
2014/03/26 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
python实现统计代码行数的小工具
2019/09/19 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
一名毕业生的自我鉴定
2013/12/04 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
合同专员岗位职责
2013/12/18 职场文书
致跳远运动员加油稿
2014/02/11 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
年终晚会活动方案
2014/08/21 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
Go timer如何调度
2021/06/09 Golang
golang连接MySQl使用sqlx库
2022/04/14 Golang
python计算列表元素与乘积详情
2022/08/05 Python