什么是 JSON
JSON 全称:JavaScript Object Notation ,是一种++跨平台通用轻量级文本数据格式,用来存储、传输数据。++
特点:所有编程语言都能看懂 ,PHP/Java/Python/ 前端 JS 全都通用,是现在前后端传数据的统一标准格式。
- 键名必须用双引号包裹,不能单引号
- 数据之间用逗号分隔,最后一项末尾不能加逗号
- 支持 6 种数据类型:字符串、数字、布尔、null、对象、数组
- 标准 JSON 不能写注释
JSON 用来干什么
-
前后端接口传数据(最主要用途)登录、查询、提交数据,统一用 JSON 收发
-
配置文件 网站配置、小程序配置都常用
.json文件 -
本地存储数据浏览器本地缓存、小程序缓存
和普通文本、表单数据区别
- 普通文字:杂乱无章,程序不好读取
- 表单键值对:只能简单传单个字段
- JSON:结构清晰,能一次性传递复杂多层数据,程序自动解析
与XML区别
JSON = 轻量、简洁、快 → 现代前后端交互首选
XML = 繁琐、笨重、扩展性强 → 老系统 / 企业专用
| 特性 | JSON | XML |
|---|---|---|
| 全称 | JavaScript 对象表示法 | 可扩展标记语言 |
| 语法 | 键值对 {"key":"val"},极简 |
自定义标签 <key>val</key>,繁琐 |
| 体积 | 无冗余字符,体积小、传输快 | 标签重复,体积大、传输慢 |
| 解析难度 | 原生支持,JS/PHP 一行代码解析 | 需要专门解析器,代码复杂 |
| 数据类型 | 支持数字 / 布尔 / 数组 / 对象 | 所有数据都是字符串,需手动转换 |
| 注释 | 标准格式不支持注释 | 支持 <!-- 注释 --> |
| 主要用途 | 前后端接口、API、小程序、APP | 老系统、配置文件、企业级服务 |
| 学习成本 | 极低,5 分钟学会 | 较高,规则复杂 |
代码对照,明显JSON更加轻便和简洁:
php
JSON------------------
{
"user": {
"id": 1,
"name": "张三",
"age": 20
}
}
XML-------------------
<user>
<id>1</id>
<name>张三</name>
<age>20</age>
</user>
JSON转码封装和解封装还原读取
php
<?php
class index
{
public string $Username;
private string $Email;
private int $Age;
private string $Password;
public function __construct(string $Username,string $Email,int $Age,string $Password)
{
$this->Username = $Username;
$this->Email = $Email;
$this->Age = $Age;
$this->Password = $Password;
}
public function __set(string $name, $value)
{
$this->$name = $value;
}
public function __get(string $name)
{
if (property_exists($this,$name)) {
return $this->$name;
}
return null;
}
public function getter()
{
return $this->age;
}
public function setter(string $Password)
{
$this->Password = $Password;
}
public function getPassword()
{
return md5($this->Password);
}
}
$UserIndex = new index("李四","xxx@163.com","18","999");
echo "姓名:" . $UserIndex->Username . "\n" . "<br>".
"邮箱:" . $UserIndex->Email . "\n" . "<br>".
"年龄:" . $UserIndex->Age . "\n". "<br>".
"密码:". $UserIndex->getPassword()."\n"."<br>";
//json封装:
$manMessage=array('name'=>$UserIndex->Username,'email'=>$UserIndex->Email,'age'=>$UserIndex->Age);
$manMessage_json=json_encode(($manMessage),JSON_UNESCAPED_UNICODE);
echo '<br>'.'json封装后:'.$manMessage_json."\n"."<br>";
//json解封装数据还原:
echo '<br>'.'解封装后:';
var_dump(json_decode($manMessage_json,true));
//打印指定值
$data =json_decode($manMessage_json,true);
echo '邮箱是:'.$data['email'];
这是用户提交信息

JSON实战应用演示
前端封装并提交:
前端js封装json并向后端发送json文件:
php
/**
* 用户登录 JSON 封装并提交到 login.php
* 运行:node login.js
*/
const loginData = {
username: 'admin',
password: '123456',
};
// 封装为 JSON 字符串
const jsonBody = JSON.stringify(loginData);
fetch('http://localhost/json模拟/后端json解封装.php', {
method: 'POST',
header: {
'Content-Type': 'application/json',
},
body: jsonBody,
})
//返回文本
// .then((res) => res.text())
// .then((text) => {
// console.log('PHP 返回:');
// console.log(text);
// })
//返回状态码
.then((adc) => adc.json())
.then((result) => {
console.log('状态码 code:', result.code);
console.log('完整返回:', result);
})
.catch((err) => {
console.error('请求失败:', err.message);
});
后端json解封装:
php
<?php
/**
* 接收前端 JS 封装的登录 JSON,解封装后输出
*/
header('Content-Type: application/json; charset=utf-8');
// 读取 JS 发来的原始 JSON
$rawJson = file_get_contents('php://input');
// 解封装:JSON 字符串 → PHP 数组
$loginData = json_decode($rawJson, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo json_encode([
'success' => false,
'message' => 'JSON 解析失败',
], JSON_UNESCAPED_UNICODE);
exit;
}
// 输出解封装后的数据
echo json_encode([
'code' => 200,
'success' => true,
'message' => '接收并解封装成功',
'received' => [
'username' => $loginData['username'] ?? '',
'password' => $loginData['password'] ?? '',
],
], JSON_UNESCAPED_UNICODE);
返回结果:

可以看的出来,前端js收到了后端的状态码和数据,并按照前端的方式打印结果。