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 相关文章推荐
Ajax PHP分页演示
Jan 02 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
Oct 29 PHP
工厂模式在Zend Framework中应用介绍
Jul 10 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
php实现贪吃蛇小游戏
Jul 26 PHP
php 删除指定文件夹的实例讲解
Jul 25 PHP
PHP学习记录之数组函数
Jun 01 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
Sep 30 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
怎样去阅读一份php源代码
2009/08/21 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
php foreach循环中使用引用的问题
2013/11/06 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
jquery移动listbox的值原理及代码
2013/05/03 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
js表单序列化判断空值的实例
2017/09/22 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
Python sorted函数详解(高级篇)
2018/09/18 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
How to spawning asynchronous work in J2EE
2016/08/29 面试题
财务人员的自我评价范文
2014/03/03 职场文书
销售人员求职的自我评价分享
2014/03/15 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
男方婚前保证书
2015/02/28 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL