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/n/259756.html
微信扫一扫
支付宝扫一扫