PHP应用JSON技巧讲解


Posted in PHP onFebruary 03, 2013

php json_decode返回数据js的处理

php json_decode后,返回到前台的数据如:encode_str =》{"green":10,"size":5,"strock":12}
则js通过 eval("obj = " + encode_str + ";") ;
便可将json数据实例化为对象, 直接obj.green即可得到数据。

Javascript 中可以用{}表示一个对象,用[]表示一个数组,如:

var obj={"a":"v","b":"x"};//这表示变量obj是一个对象,它有两个属性:a和b,属性值分别是:v和x.
var arr=["v","x"];//这表示变量arr是一个数组,它有两一元素,索引分别是0和1,值分别是:v和x.
JSON其实就是这两种格式混合在一起来表示数据的逻辑结构的格式,其实JSON就是Javascript中对象和数组的混合体

PHP提供的专门的函数来生成和解析JSON格式的数据,PHP解析出来的数据根原先Javascript的数据的意义一样,即Javascript对象解析成PHP对象,Javascript数组解析成PHP数组,PHP应用JSON的函数是:json_encode($PHPcode);
PHP解析JSON的函数是:json_decode($JSONcode);

所以JSON的形式有多种,不同的形式在PHP解释出来后的形式也是不同的。

//形式1:完全是对象的形式,这种形式的数据在Javascript
中又叫相关数组,与一般数组不同的是,
它可以通过字符串作索引来访问(用“[]”或“.”
来表示层级)   
$json='{"item1":{"item11":{"n":"chenling",
"m":"llll"},"sex":"男","age":"25"},"item2":
{"item21":"ling","sex":"女","age":"24"}}';   
$J=json_decode($json);   
print_r($J);

将输出:
stdClass Object   
(   
[item1] => stdClass Object   
(   
[item11] => stdClass Object   
(   
[n] => chenling   
[m] => llll   
)   
[sex] => 男   
[age] => 25   
)   
[item2] => stdClass Object   
(   
[item21] => ling   
[sex] => 女   
[age] => 24   
)   
)

比如说我要取得了值是chenling的那个属性,则应该这样访问:
$J->item1->item11->n;//这将取得属性n的值:chenling
其实这种访问形式跟访问普通的对象属性差不多,也相当于访问一个3维数组。
//形式2:对象和数组混合   
$json='{"item1":[{"name":[{"chen":
"chenling","ling":"chenli"}],"sex":
"男","age":"25"},{"name":"sun","sex":
"女","age":"24"}]}';   
$J=json_decode($json);   
print_r($J);   
将输出:   
stdClass Object   
(   
[item1] => Array   
(   
[0] => stdClass Object   
(   
[name] => Array   
(   
[0] => stdClass Object   
(   
[chen] => chenling   
[ling] => chenli   
)   
)   
[sex] => 男   
[age] => 25   
)   
[1] => stdClass Object   
(   
[name] => sun   
[sex] => 女   
[age] => 24   
)   
)   
)

比如说我要取得了值是chenling的那个元素,则应该这样访问:
$J->item1[0]->name[0]->chen;//这将取得元素chen的值:chenling
其实这种PHP应用JSON形式结合了对象和数组的访问方式,也相当于访问一个5维数组。
//形式3:完全数组形式   
$json='[["item1","item11"],[
"n","chenling"],["m","llll"]]';   
$J=json_decode($json);   
print_r($J);   
将输出:   
Array   
(   
[0] => Array   
(   
[0] => item1   
[1] => item11   
)   
[1] => Array   
(   
[0] => n   
[1] => chenling   
)   
[2] => Array   
(   
[0] => m   
[1] => llll   
)   
)

比如说我要取得了值是chenling的那个元素,则应该这样访问:

$J[0][1];//这将取得元素值chenling的那个元素

但是用这种方式有一个缺点,就是无法用字符串作为索引,只能用数字,用完全对象的形式可以解决这个问题,其实这种访问形式就是数组的访问方式,相当于访问一个2维数组。

PHP应用JSON小结:

从上面的PHP应用JSON例子可以看出JSON有点类似XML,也可以在PHP和Javascript之间传递带结构的数据,使用起来很方便。
需要注意的是每个属性和属性值都由引号""包括起来。

PHP 相关文章推荐
php htmlentities和htmlspecialchars 的区别
Aug 18 PHP
php列出一个目录下的所有文件的代码
Oct 09 PHP
fetchAll()与mysql_fetch_array()的区别详解
Jun 05 PHP
浅析php变量作用域的一些问题
Aug 08 PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 PHP
php递归json类实例
Dec 02 PHP
php动态函数调用方法
May 21 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
使用PHP进行微信公众平台开发的示例
Aug 21 PHP
php判断文件上传图片格式的实例详解
Sep 30 PHP
PHP绕过open_basedir限制操作文件的方法
Jun 10 PHP
php ajax数据传输和响应方法
Aug 21 PHP
set_include_path和get_include_path使用及注意事项
Feb 02 #PHP
php代码中使用换行及(\n或\r\n和br)的应用
Feb 02 #PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
Feb 02 #PHP
php验证手机号码(支持归属地查询及编码为UTF8)
Feb 01 #PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 #PHP
PHP数组传递是值传递而非引用传递概念纠正
Jan 31 #PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 #PHP
You might like
mysqli_set_charset和SET NAMES使用抉择及优劣分析
2013/01/13 PHP
微信公众平台开发之配置与请求
2015/08/26 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
python中二维阵列的变换实例
2014/10/09 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
Python批量更改文件名的实现方法
2017/10/29 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
详解python中的装饰器
2018/07/10 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
销售人员中英文自荐信
2013/09/22 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
班主任工作年限证明
2014/01/12 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
查摆问题整改措施
2014/10/24 职场文书
会议邀请函
2015/01/30 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers