php使用json_encode对变量json编码

2015-01-24信息快讯网

这篇文章主要是说明 json_encode 使用时一个需要注意的细节,无论返回的是数组还是 json,都不代表这一定就是个错误的返回结果,当前端需要的数组时,数组就是正确的结果,反之亦然

在 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'
};

Yii中render和renderPartial的区别
PHP处理Json字符串解码返回NULL的解决方法
浅析PHP中strlen和mb_strlen的区别
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
简单分析ucenter 会员同步登录通信原理
PHP中使用json数据格式定义字面量对象的方法
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
php解析json数据实例
zend framework框架中url大小写问题解决方法
PHP JSON出错:Cannot use object of type stdClass as array解决方法
PHP中的gzcompress、gzdeflate、gzencode函数详解
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
PHP使用GIFEncoder类处理gif图片实例
PHP使用GIFEncoder类生成gif动态滚动字幕
PHP使用GIFEncoder类生成的GIF动态图片验证码
php实现httpclient类示例
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
php5.2 Json不能正确处理中文、GB编码的解决方法
php检测useragent版本示例
PHP fopen()和 file_get_contents()应用与差异介绍
zf框架的db类select查询器join链表使用示例(zend框架)
zf框架的zend_cache缓存使用方法(zend框架)
详解PHP中strlen和mb_strlen函数的区别
php判断是否为json格式的方法
PHP json_decode函数详细解析
php使用curl发送json格式数据实例
Server.HTMLEncode让代码在页面里显示为源代码
关于JSON以及JSON在PHP中的应用技巧
php数组转换js数组操作及json_encode的用法详解
php json_encode值中大括号与花括号区别
PHP json_encode中文乱码问题的解决办法
©2014-2024 dbsqp.com