关于YII中JSON的操作
来源:互联网 发布:identifier c语言 编辑:程序博客网 时间:2024/06/16 20:21
近日在了解YII中的JSON操作方法,发现内置了好几种进行JSON对象和字符串,包括JS的JSON互通的方法,下面是三种方式的JSON解析:
CJSON::encode( $json );json_encode( $json );CJavaScript::jsonEncode( $json );
我们还是来看个例子吧!先上代码吧:
$json = array ('item1' => array ('item11' => array ('n' => 'chenling','m' => 'llll' ),'sex' => '男','age' => 25,'admin'=>true ),'item2' => array ('item21' => 'ling','sex' => '女','age' => '24','admin'=>false ) );
这上面是个三个层级的数组,数组的值包括了字符串、boolean、和数字,我们通过上面的三种方式来输出看看结果是什么:
$jsonObj = CJSON::encode( $json );$jsono = json_encode( $json );$jsonjs = CJavaScript::jsonEncode( $json );echo $jsonObj.'<br />';echo $jsonjs.'<br />';echo $jsono.'<br />';
结果:
看来三种方式都可以,解析出来的也是一样的。如果要访问数组的值的话,用下面的 代码就行了。
echo $json['item1']['sex'].'<br />';现在来看看转换成JSON对象的方法:
$jsonstr='{"item1":{"item11":{"n":"chenling","m":"llll"},"sex":"男","age":"25"},"item2":{"item21":"ling","sex":"女","age":"24"}}';echo $jsonstr.'<br />';
//$j = CJSON::decode($jsonstr);//$j = CJavaScript::jsonDecode($jsonstr);<span style="color:#ff0000;"><strong>$j = json_decode($jsonstr,true);//当字符串为{"1":1,"2":1} 这种模式时,json_decode默认解析出来的结果是一个对象,此时可以设置它的第二个参数为true强制让它返回数组</strong></span>
上面两个方法转换都是没有问题的,关键是上面红色标注的就有问题了,如果我没有加后面的参数true的话,结果就是下面的报错信息,原因就是因为
当字符串为{"1":1,"2":1} 这种模式时,json_decode默认解析出来的结果是一个对象,此时可以设置它的第二个参数为true强制让它返回数组。
如果是下面的这个代码,则转换就没有问题
$jsonstr = '[1,2,3]';$j = json_decode($jsonstr);//如果不加第二个参数的话,当字符串为[1,2,3] 这种模式时,json_decode默认解析出来的结果是一个数组echo $j[2].'<br />';
所以这个是要注意的,同时我们可能遇到下面的这种情况的JSON字符串,这个也是要注意的!尤其是要注意转换完成后的数组访问方式:
$jsonstr='{"item1":[{"name":[{"chen":"chenling","ling":"chenli"}],"sex":"男","age":"25"},{"name":"sun","sex":"女","age":"24"}]}';$j = CJSON::decode($jsonstr);echo $j['item1'][0]['name'][0]['chen'].'<br />';<strong><span style="color:#ff0000;">$j = json_decode($jsonstr,true);</span></strong>echo $j['item1'][0]['name'][0]['chen'].'<br />';$j = CJavaScript::jsonDecode($jsonstr);echo $j['item1'][0]['name'][0]['chen'].'<br />';
这种情况也得注意,都是数组的情况下,只能通过索引进行访问,而不能通过key来访问。
$jsonstr='[["item1","item11"],["n","chenling"],["m","llll"]]';$j = CJSON::decode($jsonstr);echo $j[1][1].'<br />';$j = json_decode($jsonstr);echo $j[0][0].'<br />';$j = CJavaScript::jsonDecode($jsonstr);echo $j[0][0].'<br />';
也就是说在这三种的情况下:
CJSON和CJavaScript的方式是可以通用的,而json_的方式是需要第二个参数来决定的。所以为了兼容,我们还是尽量使用前两个进行JSON的转换操作;
转载请注明: http://blog.csdn.net/qq415734794/article/details/7662449
0 0
- 关于YII中JSON的操作
- 关于YII中JSON的操作
- 关于Android中JSON数据的操作
- 关于Yii中实现dropDownList联动操作
- Yii中session的操作
- 关于 yii的基础操作问题 1
- 关于yii中jquery的用法
- yii中关于select2的使用
- 关于Yii中findBySql的查询
- Yii框架中关于分页的信息
- 5.QT中关于HTTPClient相关的操作,Json数据传输
- YII中Session操作!
- Python关于JSON的操作
- 关于 Yii 的 DAO数据库操作的总结
- YII的数据库操作
- yii的基本操作
- 关于yii的relations
- 关于yii的relations
- 常用的Linux命令
- spring 注释
- iOS中Block介绍(一)基础
- Git commit template 模板设定
- C#总结
- 关于YII中JSON的操作
- [2.x]cocos2d-x的消息和数据传递
- druid配置
- 经典排序算法 - 快速排序Quick sort
- python 装饰器例子
- Linux C 多线程编程 总结
- LNMP环境搭建
- 在64位Windows 7系统上部署Apache+PHP+MySQL
- iOS中Block介绍(二)内存管理与其他特性