一、JSON 核心定义
- 全称:JavaScript Object Notation(JavaScript 对象表示法)
- 本质 :一种轻量级的文本数据交换格式 (整体是符合特定规则的字符串)
- 作用:不同编程语言之间传递 / 存储数据(比如 Python 程序和前端、后端交互,或保存配置文件)
- 核心特点:语法简单、易读易写、跨语言兼容
二、JSON 与 Python 数据类型对应关系
| JSON 类型 | Python 类型 | 示例 | 关键注意点 |
|---|---|---|---|
| 对象(object) | 字典(dict) | {"name": "张三"} |
JSON 键必须用双引号,值如果是字符串类型的话也必须用双引号 |
| 数组(array) | 列表(list) | [1, 2, "篮球"] |
元素可混合多种 JSON 类型 |
| 字符串(string) | 字符串(str) | "Python" |
必须用双引号包裹 |
| 数字(number) | 整数 / 浮点数 | 18 / 3.14 |
无引号,支持正负 / 小数 |
| 布尔值 | True/False | true / false |
JSON 是小写,Python 大写 |
| 空值 | None | null |
JSON 写 null,Python 写 None |
三、JSON 核心语法规则
1. 整体规则
- 一个合法的 JSON 文本 / 文件,只能有一个顶层数据 (要么是
{}、要么是[]、要么是单个基础值如18/"张三")
2. 对象({})规则(对应 Python 字典)
- 用
{}包裹,内部是键:值对的集合,键值对之间用英文逗号分隔 - 键:必须用双引号 包裹(如
"name",不能写name或'name') - 值:可以是任意 JSON 类型(字符串、数字、布尔、null、数组、嵌套对象)
- ✅ 正确示例:
{"age": 18, "hobbies": ["篮球", "游戏"], "info": {"gender": "男"}} - ❌ 错误示例:
{name: "张三", 'age': 18, 20}(键无引号 / 单引号、存在孤立值)
3. 数组([])规则(对应 Python 列表)
- 用
[]包裹,内部是任意 JSON 类型的元素,元素之间用英文逗号分隔 - 无需键,直接放值即可,支持嵌套对象 / 数组
- ✅ 正确示例:
["张三", 18, true, null, {"age": 20}] - ❌ 错误示例:
['张三', 18, True](单引号、布尔值大写)
4. 基础值规则
- 字符串:必须用双引号(
"张三"✅,'张三'❌,张三❌) - 数字:无引号(
18✅,"18"❌) - 布尔:只能写
true/false(小写) - 空值:只能写
null
四、JSON 常用写法
模板 1:单对象(最常用,如存储单个用户信息)
javascript
{
"name": "张三",
"age": 18,
"is_student": true,
"hobbies": ["篮球", "游戏"],
"score": null,
"address": {"city": "北京", "district": "朝阳"}
}
模板 2:数组(存储多个同类数据)
javascript
[
{"name": "张三", "age": 18},
{"name": "李四", "age": 20},
{"name": "王五", "age": 19}
]
数组里面混合不同数据类型也行
javascript
{
"user_id": 1001,
"action_logs": [ // 数组里混合不同类型的行为记录
"2026-03-18 登录系统", // 字符串
{"action": "下单", "amount": 99.9}, // 对象
["浏览商品", 1002, 1003], // 数组
null // 空记录(比如未完成的操作)
]
}
模板 3:对象嵌套数组(实际开发最常用)
javascript
{
"class_name": "一年级一班",
"total_students": 3,
"students": [
{"name": "张三", "age": 18},
{"name": "李四", "age": 20},
{"name": "王五", "age": 19}
],
"update_time": "2026-03-18"
}
模板 4:单个基础值(极少单独用,了解即可)
javascript
18 // 顶层是数字
"张三" // 顶层是字符串
true // 顶层是布尔值
null // 顶层是空值
五、Python 操作 JSON 的核心函数
Python 内置 json 模块,无需安装,核心 4 个函数:
| 函数 | 作用 | 适用场景 | 关键参数 |
|---|---|---|---|
json.dumps() |
Python 对象 → JSON 字符串 | 内存中转换(如接口传参) | ensure_ascii=False(保留中文)、indent=4(格式化) |
json.loads() |
JSON 字符串 → Python 对象 | 解析接口返回的 JSON 字符串 | - |
json.dump() |
Python 对象 → 写入 JSON 文件 | 保存数据到文件 | ensure_ascii=False、encoding="utf-8" |
json.load() |
从 JSON 文件 → Python 对象 | 读取文件中的 JSON 数据 | encoding="utf-8" |