近日在瞭解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.csdn.net/qq415734794/article/details/7662449