PHP操作json小結

Javascript 中可以用{}表示一個對象,用[]表示一個數組,如:

var obj={"a":"v","b":"x"};//這表示變量obj是一個對象,它有兩個屬性:a和b,屬性值分別是:v和x.

var arr=["v","x"];//這表示變量arr是一個數組,它有兩一元素,索引分別是0和1,值分別是:v和x.

JSON其實就是這兩種格式混合在一起來表示數據的邏輯結構的格式,其實JSON就是Javascript中對象和數組的混合體

PHP提供的專門的函數來生成和解析JSON格式的數據,PHP解析出來的數據根原先Javascript的數據的意義一樣,即 Javascript對象解析成PHP對象,Javascript數組解析成PHP數組

PHP生成JSON的函數是:json_encode($PHPcode);

PHP解析JSON的函數是:json_decode($JSONcode);

所以JSON的形式有多種,不同的形式在PHP解釋出來后的形式也是不同的。

//形式1:完全是對象的形式,這種形式的數據在Javascript中又叫相關數組,與一般數組不同的是,它可以通過字符串作索引來訪問(用“[]”或 “.”來表示層級)

$json='{"item1":{"item11":{"n":"chenling","m":"llll"},"sex":" 男","age":"25"},"item2":{"item21":"ling","sex":"女","age":"24"}}';

$J=json_decode($json);

print_r($J);

將輸出:

stdClass Object

(

[item1] => stdClass Object

(

[item11] => stdClass Object

(

[n] => chenling

[m] => llll

)

[sex] => 男

[age] => 25

)

[item2] => stdClass Object

(

[item21] => ling

[sex] => 女

[age] => 24

)

)

比如說我要取得了值是chenling的那個屬性,則應該這樣訪問:

$J->item1->item11->n;//這將取得屬性n的值:chenling

其實這種訪問形式跟訪問普通的對象屬性差不多,也相當于訪問一個3維數組。

//形式2:對象和數組混合

$json='{"item1":[{"name":[{"chen":"chenling","ling":"chenli"}],"sex":" 男","age":"25"},{"name":"sun","sex":"女","age":"24"}]}';

$J=json_decode($json);

print_r($J);

將輸出:

stdClass Object

(

[item1] => Array

(

[0] => stdClass Object

(

[name] => Array

(

[0] => stdClass Object

(

[chen] => chenling

[ling] => chenli

)

)

[sex] => 男

[age] => 25

)

[1] => stdClass Object

(

[name] => sun

[sex] => 女

[age] => 24

)

)

)

比如說我要取得了值是chenling的那個元素,則應該這樣訪問:

$J->item1[0]->name[0]->chen;//這將取得元素chen的值:chenling

其實這種訪問形式結合了對象和數組的訪問方式,也相當于訪問一個5維數組。

//形式3:完全數組形式

$json='[["item1","item11"],["n","chenling"],["m","llll"]]';

$J=json_decode($json);

print_r($J);

將輸出:

Array

(

[0] => Array

(

[0] => item1

[1] => item11

)

[1] => Array

(

[0] => n

[1] => chenling

)

[2] => Array

(

[0] => m

[1] => llll

)

)

比如說我要取得了值是chenling的那個元素,則應該這樣訪問:

$J[1][1];//這將取得元素值chenling的那個元素

但是用這種方式有一個缺點,就是無法用字符串作為索引,只能用數字,用完全對象的形式可以解決這個問題

其實這種訪問形式就是數組的訪問方式,相當于訪問一個2維數組。

小結:

從上面的例子可以看出JSON有點類似XML,也可以在PHP和Javascript之間傳遞帶結構的數據,使用起來很方便。

需要注意的是每個屬性和屬性值都由引號""包括起來。

json_decode是php5.2.0之后新增的一個PHP內置函數,其作用是對JSON?格式的字符串進行編碼.

json_decode的語法規則:json_decode?(?string?$json?[,?bool?$assoc?=?false?[,?int?$depth?=?512?[,?int?$options?=?0?]]]?)

json_decode接受一個?JSON?格式的字符串并且把它轉換為?PHP?變量?,當該參數$assoc為?TRUE?時,將返回?array?否則返回?object?。

JSON?格式的字符串

$json?=?'{"a":"php","b":"mysql","c":3}';

其中a為鍵,php為a的鍵值。

我們來看一個實例:

1

2$json='{"a":"php","b":"mysql","c":3}';

3$json_Class=json_decode($json);

4$json_Array=json_decode($json,?true);

5print_r($json_Class);

6print_r($json_Array);

7

8?>

程序輸出:

stdClass?Object?(

[a]?=>?php

[b]?=>?mysql

[c]?=>?3?)

Array?(

[a]?=>?php

[b]?=>?mysql

[c]?=>?3?)

在上面代碼的前提下

訪問對象類型$json_Class的a的值

1echo$json_Class->{'a'};

程序輸出:php

訪問數組類型$json_Array的a的值

1echo$json_Array['a'];

程序輸出:php

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,948評論 18 139
  • PHP7 已經出來1年了,PHP7.1也即將和大家見面,這么多好的特性,好的方法,為什么不使用呢,也希望PHP越來...
    夢幻_78af閱讀 2,128評論 1 10
  • 朋友78歲的老母親膝蓋積液腫大,走路艱難,怕抽液容易反復還易造成膝蓋進一步損傷,年齡太大也不好進行手術治療,來問我...
    向日葵醒了閱讀 1,601評論 0 5
  • 教育,對于我們來說有著舉足輕重的作用,大到國家,小到個人,每個人都深處教育之中。 從國家層面上來說,隨...
    阿七98閱讀 9,180評論 0 3
  • 今天上午聽了曾小玲院長的課,收獲很多,感想很多。我覺得有效溝通是事業成功的關鍵,人與人之間的溝通,言語溝通是...
    一組劉曉燕閱讀 408評論 0 0