JSON(JavaScript Object Notation)是一種輕量級數據交換格式,它易於人閱讀和編寫,同時也易於機器理解和生成。PHP提供了json_encode()函數和json_decode()函數來實現JSON的編碼和解碼。接下來,將從以下幾個方面為您講解PHP JSON編碼和解碼。
一、JSON的概述
JSON是一種輕量級數據交換格式,它以文本的方式進行數據編碼,可被解析成Javascript對象。JSON採用了類似於C語言的語法,這使得JSON數據在各種編程語言中都是易於理解的。
JSON數據由兩種結構構成:鍵值對和數組。鍵值對表示為{key:value},數組表示為[value1,value2,value3]。
二、json_encode()函數
json_encode()函數用於將PHP中的數據轉換為JSON格式的字符串。
下面是一個例子:
$data = array(
"name" => "Tom",
"age" => 18,
"sex" => "male"
);
$jsonStr = json_encode($data);
echo $jsonStr;
上述代碼將$data數組轉換為JSON格式的字符串,並輸出。輸出結果為:
{"name":"Tom","age":18,"sex":"male"}
三、json_decode()函數
json_decode()函數用於將JSON格式的字符串轉換為PHP中的變量。
下面是一個例子:
$jsonStr = '{"name":"Tom","age":18,"sex":"male"}';
$data = json_decode($jsonStr, true);
print_r($data);
上述代碼將JSON格式的字符串$jsonStr轉換為PHP中的變量,並用print_r()函數輸出。輸出結果為:
Array
(
[name] => Tom
[age] => 18
[sex] => male
)
四、處理JSON數據中的中文字符
由於JSON數據是以Unicode字符集輸出的,所以中文字符必須進行編碼後才能正確傳輸。而json_encode()函數中存在第二個參數$options,可以通過設置JSON_UNESCAPED_UNICODE常量來解決處理JSON數據中的中文字符。
下面是一個例子:
header('Content-Type:application/json;charset=utf-8');
$data = array(
"name" => "張三",
"age" => 20,
"sex" => "男"
);
$jsonStr = json_encode($data, JSON_UNESCAPED_UNICODE);
echo $jsonStr;
上述代碼將$data數組轉換為JSON格式的字符串,並用echo輸出。其中用header()函數設置響應頭Content-type,防止中文亂碼。輸出結果為:
{"name":"張三","age":20,"sex":"男"}
五、處理含有對象或數組的JSON數據
在JSON數據中,可以包含對象或數組等複雜的數據結構,其編碼和解碼也比較簡單。在json_encode()函數中,只需將包含對象和數組的變量轉換為PHP中的對象或數組即可;在json_decode()函數中,只需通過第二個參數指定返回值類型即可。
下面是一個例子:
$data = array(
"name" => "Tom",
"age" => 18,
"hobbies" => array("reading","music"),
"address" => (object)array("province"=>"Guangdong","city"=>"Shenzhen","district"=>"Nanshan")
);
$jsonStr = json_encode($data);
echo $jsonStr;
echo "\n";
$obj = json_decode($jsonStr);
print_r($obj);
echo "\n";
$assocArr = json_decode($jsonStr, true);
print_r($assocArr);
上述代碼中,$data數組中包含一個hobbies數組和一個address對象。用json_encode()函數將其轉換為JSON格式的字符串,用echo輸出。用json_decode()函數將其轉換為對象和數組,並用print_r()函數輸出。輸出結果為:
{"name":"Tom","age":18,"hobbies":["reading","music"],"address":{"province":"Guangdong","city":"Shenzhen","district":"Nanshan"}}
stdClass Object
(
[name] => Tom
[age] => 18
[hobbies] => Array
(
[0] => reading
[1] => music
)
[address] => stdClass Object
(
[province] => Guangdong
[city] => Shenzhen
[district] => Nanshan
)
)
Array
(
[name] => Tom
[age] => 18
[hobbies] => Array
(
[0] => reading
[1] => music
)
[address] => Array
(
[province] => Guangdong
[city] => Shenzhen
[district] => Nanshan
)
)
六、JSONPath的使用
JSONPath是一種用於在JSON數據中選取數據的表達式,類似於XPath用於XML。使用JSONPath後,我們可以通過一個表達式來調整數據並從中提取出所需的值。
使用JSONPath需要導入第三方類庫。下面是一個例子:
假設有以下JSON字符串:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
要從中提取出“Sword of Honour”的書名和價格,JSONPath表達式為$store.book[1].title和$store.book[1].price。代碼如下:
use Flow\JSONPath\JSONPath;
$jsonStr = '{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}';
$json = json_decode($jsonStr);
$jsonPath = new JSONPath($json);
$title = $jsonPath->find('$store.book[1].title')[0];
$price = $jsonPath->find('$store.book[1].price')[0];
echo "書名:".$title."\n";
echo "價格:".$price."\n";
輸出結果為:
書名:Sword of Honour 價格:12.99
結語
通過本文的講解,您已經了解了PHP JSON編碼和解碼的相關知識。同時,您也學會了如何處理JSON數據中的中文字符和含有對象或數組的JSON數據,以及如何使用JSONPath從JSON數據中提取所需的數據。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/259756.html
微信掃一掃
支付寶掃一掃