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读取txt文件的内容并赋值给数组的代码
Nov 03 PHP
php 字符串替换的方法
Jan 10 PHP
PHP基础知识回顾
Aug 16 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
Jun 12 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
PHP递归算法的简单实例
Feb 28 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
杏林同学录(三)
2006/10/09 PHP
PHP 如何向 MySQL 发送数据
2006/10/09 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
php curl模拟post请求小实例
2013/11/13 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
2012/07/31 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
uniapp与webview之间的相互传值的实现
2020/06/29 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
Python 爬虫模拟登陆知乎
2016/09/23 Python
python模块smtplib学习
2018/05/22 Python
Python查看微信撤回消息代码
2018/06/07 Python
Python for循环中的陷阱详解
2018/07/13 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
匡威英国官网:Converse英国
2018/12/02 全球购物
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
毕业生求职简历中的自我评价
2013/10/18 职场文书
关于祖国的演讲稿
2014/05/04 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书