JSON(JavaScript Object Notation, JS 對象标記) 是一種輕量級的資料交換格式。它基于 ECMAScript (w3c制定的js規範)的一個子集,采用完全獨立于程式設計語言的文本格式來存儲和表示資料。簡潔和清晰的層次結構使得 JSON 成為理想的資料交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。
想要用 PHP 操作 JSON 就離不開下面兩個函數:json_decode(); // 對JSON格式的字元串進行解碼
json_encode(); // 對變量進行 JSON 編碼
這裡先說 json_decode 對 JSON 格式的字元串進行解碼,前端上傳的 JSON 資料對于 PHP 來說就是字元串,json_decode 可以把 JSON 字元串轉換為 PHP 對象。
JSON 解碼 & 操作
下面是一個 PHP 寫的 JSON 字元串:$json = '{"user": "Administrator", "password": "123456"}';
如果不經過轉換是不能直接操作的,即使用正規表達式也很難,如果直接輸出的話還是一樣的字元串:{"user": "Administrator", "password": "123456"}
這裡就需要用到 json_decode 來轉換,需要傳入要轉換的 JSON 字元串,傳回轉換後的 PHP 對象:$json = '{"user": "Administrator", "password": "123456"}'; // JSON字元串
$json = json_decode($json); // JSON字元串解碼
現在就可以操作這個 JSON 對象了:echo $json->user; // 輸出使用者
echo $json->password; // 輸出密碼
這是一個很簡單的 JSON 資料,JSON 資料是可以包含數組和多層嵌套的,
下面是一個稍微有點難度的 JSON 資料:{
"user": "Administrator",
"password": "123456",
"phone_num": [
"13011112222",
"15522222222",
"13988888888"
],
"friends": [
{
"name": "馬雲",
"age": "54"
},
{
"name": "馬化騰",
"age": "47"
},
{
"name": "李彥宏",
"age": "50"
}
]
}echo $json->user; // 輸出使用者
echo $json->password; // 輸出密碼
for($i = 0;$i < count($json->phone_num);$i ++) {
echo $json->phone_num[$i]; // 輸出手機号
}
for ($i = 0;$i < count($json->friends);$i ++) {
echo $json->friends[$i]->name; // 輸出好友名字
echo $json->friends[$i]->age; // 輸出好友年齡
}
JSON 的字段名和值用冒号分隔,數組寫在方括号裡,對象寫在花括号裡,JSON對 象裡可以包含數組,數組裡也可以包含 JSON 對象,隻要知道了 JSON 的文法結構,無論在複雜的 JSON 資料也能迎刃而解。
JSON 編碼
最後來說一下 json_encode 對 PHP 變量進行 JSON 編碼,也就是把 PHP 變量或對象轉換為 JSON 字元串,常用于輸出資料給前端。通常情況下在資料庫查詢出資料後為了便于操作都會把資料轉換為 PHP 數組,可以直接輸出到頁面,但如果前端使用 AJAX 請求的話就不能直接輸出數組了,這時候就需要用 json_encode 把數組轉換為 JSON 字元串,友善前端解析。
下面是一個 PHP 數組:$data = array(
array(
"name" => "小明",
"age" => 10
),
array(
"name" => "小強",
"age" => 8
),
array(
"name" => "小李",
"age" => 10
)
);
如果直接用 print_r 輸出的話前端是不能解析的,這裡使用 json_encode 對數組進行編碼:$data = json_encode($data);
傳入要編碼的 PHP 變量或對象,傳回編碼後的 JSON 字元串,下面是經過 JSON 編碼後的效果:[
{
"name": "小明",
"age": 10
},
{
"name": "小強",
"age": 8
},
{
"name": "小李",
"age": 10
}
]
前端收到這個 JSON 字元串後在把這個字元串轉換為 JSON 對象就可以使用了。