php陣列與json的定義及相互轉換總結

2021-09-11 00:23:41 字數 2762 閱讀 6316

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 管理和...