關於YII中JSON的操作

近日在瞭解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 />';


所以這個是要注意的,同時我們可能遇到下面的這種情況的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 />';
$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 />';


這種情況也得注意,都是數組的情況下,只能通過索引進行訪問,而不能通過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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章