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中的类-什么叫类
Nov 20 PHP
php网页后退不再出现过期
Mar 08 PHP
PHP 源代码压缩小工具
Dec 22 PHP
php下安装配置fckeditor编辑器的方法
Mar 02 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
YII框架模块化处理操作示例
Apr 26 PHP
PHP 观察者模式深入理解与应用分析
Sep 25 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 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解压文件代码实现php在线解压
2014/02/13 PHP
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
Vue指令指令大全
2019/02/09 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python数据处理numpy.median的实例讲解
2018/04/02 Python
python getpass实现密文实例详解
2019/09/24 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
Django实现随机图形验证码的示例
2020/10/15 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
环境建设实施方案
2014/03/14 职场文书
消防工作实施方案
2014/06/09 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
捐资助学感谢信
2015/01/21 职场文书
带你了解CSS基础知识,样式
2021/07/21 HTML / CSS