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 对象就可以使用了。