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 相关文章推荐
PHP4引用文件语句的对比
Oct 09 PHP
php empty函数判断mysql表单是否为空
Apr 12 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
Feb 03 PHP
web目录下不应该存在多余的程序(安全考虑)
May 09 PHP
php中apc缓存使用示例
Dec 25 PHP
PHP整合PayPal支付
Jun 11 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
Jul 14 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 PHP
针对PHP开发安全问题的相关总结
Mar 22 PHP
PHP 文件上传限制问题
Sep 01 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
Apr 23 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部分常见问题总结
2008/03/27 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
Python类的多重继承问题深入分析
2014/11/09 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
Python字符串格式化输出代码实例
2019/11/22 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
python爬虫---requests库的用法详解
2020/09/28 Python
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
技术人员面试提纲
2013/11/28 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
老干部工作汇报材料
2014/10/28 职场文书
2014年实验室工作总结
2014/12/03 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技