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 相关文章推荐
vBulletin HACK----关于排版的两个HACK
Oct 09 PHP
php 验证码实例代码
Jun 01 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
php Hex RGB颜色值互换的使用
May 10 PHP
关于zend studio 出现乱码问题的总结
Jun 23 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
php函数与传递参数实例分析
Nov 15 PHP
php验证手机号码
Nov 11 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
PHP实现的浏览器检查类
Apr 11 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的输出:缓存并压缩动态页面
2013/06/11 PHP
php利用cookie实现自动登录的方法
2014/12/10 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
表单提交验证类
2006/07/14 Javascript
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
2017/02/12 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
2019/08/07 Javascript
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
基于python 字符编码的理解
2017/09/02 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
python tkinter窗口最大化的实现
2019/07/15 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
Python实现随机爬山算法
2021/01/29 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
服务中心夜班服务员岗位职责
2013/11/27 职场文书
幼儿运动会邀请函
2014/01/17 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
终止劳动合同协议书
2014/04/14 职场文书
老师对学生的评语
2014/04/18 职场文书
实训报告范文大全
2014/11/04 职场文书
2015年企业新年寄语
2014/12/08 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android