近日在了解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);
$j = json_decode($jsonstr,true);//当字符串为{"1":1,"2":1} 这种模式时,json_decode默认解析出来的结果是一个对象,此时可以设置它的第二个参数为true强制让它返回数组
上面两个方法转换都是没有问题的,关键是上面红色标注的就有问题了,如果我没有加后面的参数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 />';
$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 />';
$j = json_decode($jsonstr,true);
echo $j['item1'][0]['name'][0]['chen'].'<br />';
$j = CJavaScript::jsonDecode($jsonstr);
echo $j['item1'][0]['name'][0]['chen'].'<br />';
$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.youkuaiyun.com/qq415734794/article/details/7662449