json定義
json是一種資料交換格式,json格式只有四條規則。
並列的資料之間用逗號(",")分隔;
對映用冒號(":")表示;
並列資料的集合(陣列)用方括號("")表示;
對映的集合(物件)用大括號("{}")表示。
總結:前兩條是用來描述乙個集合裡不同元素資料的表述,後兩條是描述不同的資料集合;所以,json共有兩種資料集合,一種是json陣列,一種是json物件。
json陣列和json物件
弄清楚json的規則後,自然也就清楚了json陣列和json物件。帶對映關係(有":"的)的是json物件,json物件必須用{}來表示。沒有對映關係的則是json陣列,必須用來表示。
所以 這種字串進行json解析時,格式錯誤。
php中的索引陣列
php中的陣列有有兩種索引陣列和關聯陣列
定義方式
索引和關聯的定義方式相同 一種"",一種是 「array()」
$arr = ["aaa","bbb","ccc"];
$arr_guanlian = [
'code' => 0,
'msg' => 'hahah',
'data' => [
'token' => "tttttt",
'redirect' => "rrrrrrrrrr"
],];
$arr = array("aaa","bbb","ccc");
$arr_guanlian = array(
'code' => 0,
'msg' => 'hahah',
'data' => [
'token' => "tttttt",
'redirect' => "rrrrrrrrrr"
],);
取值方式
索引和關聯的取值方式大致相同,和{}都可以,一般常用。當然,取值必須要輸入key值。
var_dump($arr[0]);
var_dump($arr);
//關聯陣列可以用 或者 {} 來取值
var_dump($arr_guanlian['msg']);
var_dump($arr_guanlian);
求長度
使用count()或者sizeof(),sizeof()是count()的別名,用法完全相同。這裡就是注意,php中沒有 arr.length的用法。
php中陣列與json字串的相互轉換
常規情況下
陣列和json字串相互轉化時,使用json_encoe()和json_decode()兩個方法。
索引陣列通過json_encode()轉化成字串後,再使用json_decode(字串)後,依舊得到個陣列。
關聯陣列通過son_encode()轉化成字串後,再使用json_decode(字串)後,得到的並不時陣列,而是乙個物件。 使用資料時,必須按照物件的取值方式(->)來進行獲取。
$arr1 = [
"aaa",
"bbb",
"ccc"
];$arr2 = [
'code' => 0,
'msg' => 'hahah',
'data' => [
'token' => "tttttt",
'redirect' => "rrrrrrrrrr"
],];
$str1tojson = json_encode($arr1);
$str2tojson = json_encode($arr2);
// 索引陣列的json字串的解析及取值
$result= json_decode($str1tojson);
print_r($result); //json陣列字串會被解析成陣列
// var_dump($result[0]); //可以
//關聯陣列的json字串的解析及取值
$result2 = json_decode($str2tojson);
print_r($result2); //json物件字串會被解析成物件
// var_dump($result2['code']); //報錯
// var_dump($result2); //報錯
var_dump($result2->data->token); //可以
exit;
特殊情況的轉換
我們開發中常用的是把 json物件的字串轉化成陣列,以便去讀取資料。在這裡我們有兩種方法都可以實現轉化。
json_decode後直接型別轉化
json_decode方法第二個引數為true時,可以直接得到陣列型別。
//json物件字串解析時,直接解析成陣列
$result3 = (array)json_decode($str2tojson); //方法一: 型別強制轉換
$result4 = json_decode($str2tojson,true); //方法二:使用json_decode方法解析時轉換
var_dump($result3);
var_dump($result4);
exit;
ps:最後一點陣列與json字串的相互轉換也是我們經常犯錯的地方,比如呼叫了乙個介面,該介面的返回資料時由關聯陣列encode而來的。但我們得到返回值後,要明確decode是採用的哪種方式,是物件還是陣列。 PHP資料集構建JSON及新陣列
自己寫了個php結果集轉換成json格式的函式,可以直接呼叫 function recordtojson recordset jstr substr jstr,0,strlen jstr 1 jstr jstr.jstr substr jstr,0,strlen jstr 1 jstr jstr.r...
PHP入門 陣列的定義與使用
1 陣列概述 1 宣告 1 直接賦值宣告 a 0 1 a 1 2 a name 張三 2 使用array 函式 a array 3,4 b array name zhangsan age 67 c array 1,2 age 45 混合宣告陣列時,索引陣列和關聯陣列互不影響 2 特點 可以儲存任意型...
PHP中陣列的定義及宣告例項
php中的陣列實際上是乙個有序對映。對映是一種把 values關聯到 keys 的型別。此型別在很多方面做了優化,因此可以把它當成真正的陣列,或列表 向量 雜湊表 是對映的一種實現 字典,集合,棧,佇列以及更多可能性。由於陣列元素的值也可以是另乙個陣列,樹形結構和多維陣列也是允許的。作用 1 管理和...