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初学者头疼十四条问题大总结
Nov 12 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
Jun 02 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
php使用post数组的键值创建同名变量并赋值的方法
Apr 03 PHP
php遍历CSV类实例
Apr 14 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 PHP
PHP面向对象详解(三)
Dec 07 PHP
php设计模式之委托模式
Feb 13 PHP
PHP convert_uudecode()函数讲解
Feb 14 PHP
php遍历目录下文件并按修改时间排序操作示例
Jul 12 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 xfocus防注入资料
2008/04/27 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
2013/06/23 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
Python datetime时间格式化去掉前导0
2014/07/31 Python
Python实现爬取逐浪小说的方法
2015/07/07 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
2019/06/27 Python
python取均匀不重复的随机数方式
2019/11/27 Python
python学生信息管理系统实现代码
2019/12/17 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
蒂娜商店:Tiina the Store
2019/12/07 全球购物
挂职锻炼个人总结
2015/03/05 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
工程进度款催款函
2015/06/24 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
Python中的min及返回最小值索引的操作
2021/05/10 Python
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript
Oracle中DBLink的详细介绍
2022/04/29 Oracle