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编写一个简单的路由类
Apr 13 PHP
深入PHP许愿墙模块功能分析
Jun 25 PHP
php接口与接口引用的深入解析
Aug 09 PHP
微信扫描二维码登录网站代码示例
Dec 30 PHP
php实现读取超大文件的方法
Jul 28 PHP
本地计算机无法启动Apache故障处理
Aug 08 PHP
php实现获取及设置用户访问页面语言类
Sep 24 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
PHP编程实现计算抽奖概率算法完整实例
Aug 09 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
Oct 22 PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 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
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
如何用php获取文件名后缀
2013/06/09 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
原生js实现随机点名功能
2019/11/05 Javascript
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
Python如何生成树形图案
2018/01/03 Python
Python代码需要缩进吗
2020/07/01 Python
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
大学生新闻专业个人自我评价
2013/11/12 职场文书
大学生预备党员自我评价分享
2013/11/16 职场文书
采购内勤岗位职责
2013/12/10 职场文书
《盲人摸象》教学反思
2014/02/16 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
个人授权委托书格式
2014/08/30 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang