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实现文件安全下载
Oct 09 PHP
通过对服务器端特性的配置加强php的安全
Oct 09 PHP
PHP 数组教程 定义数组
Oct 23 PHP
PHP Zip解压 文件在线解压缩的函数代码
May 26 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
PHP中获取时间的下一周下个月的方法
Mar 18 PHP
php获取URL中带#号等特殊符号参数的解决方法
Sep 02 PHP
PHP 7的一些引人注目的新特性简单介绍
Nov 08 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
Mar 21 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 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后门
2015/09/13 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
javascript 数组排序函数
2009/08/20 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[01:58]2018DOTA2亚洲邀请赛趣味视频——交流
2018/04/03 DOTA
Python实现线程状态监测简单示例
2018/03/28 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
如何使用python切换hosts文件
2020/04/29 Python
澳大利亚男士西服品牌:M.J.Bale
2018/02/06 全球购物
销售顾问的岗位职责
2013/11/13 职场文书
工程管理专业个人求职信范文
2013/12/07 职场文书
营销总经理的岗位职责
2013/12/15 职场文书
电子工程专业毕业生求职信
2014/03/14 职场文书
爱心倡议书范文
2014/05/12 职场文书
建筑工地大门标语
2014/06/18 职场文书
单位更名证明
2015/06/18 职场文书
详解Redis集群搭建的三种方式
2021/05/31 Redis