Python JSON 操作指南:4 个核心方法一文吃透
·
在 Python 开发中,JSON 是最常用的数据交换格式,无论是接口数据传输、配置文件读写,还是数据持久化,都离不开 json 模块。但很多新手容易混淆 dump/dumps/load/loads 四个方法,今天就用最通俗的语言、最全的案例,帮你彻底搞定 Python JSON 操作!
一、先搞懂:4 个核心方法的核心区别
json 模块的 4 个方法,本质是 **「数据类型转换」和「文件读写」** 的组合,一句话区分:
- 带
s的(dumps/loads):操作字符串(内存中转换,不读写文件) - 不带
s的(dump/load):操作文件(直接读写文件,一步到位) dump开头:Python 对象 → JSON(序列化)load开头:JSON → Python 对象(反序列化)
二、序列化:Python 对象 → JSON 格式
序列化就是把 Python 里的字典、列表,转换成标准的 JSON 格式,分转字符串和写文件两种场景。
1. json.dumps ():转 JSON 字符串(最常用)
适合需要在内存中使用 JSON 字符串的场景,比如打印、接口返回数据。关键参数:
ensure_ascii=False:保留中文(默认会把中文转成 Unicode 编码)indent=4:格式化缩进,让 JSON 更易读
import json
# 定义 Python 字典
student = {
"name": "张三",
"age": 22,
"major": "计算机科学",
"hobbies": ["编程", "篮球", "阅读"]
}
# 转换为 JSON 字符串(保留中文+格式化)
json_str = json.dumps(student, ensure_ascii=False, indent=4)
# 输出结果:标准 JSON 格式字符串
print("JSON 字符串:")
print(json_str)
print("类型:", type(json_str)) # <class 'str'>
2. json.dump ():直接写入 JSON 文件
适合需要把数据持久化保存到文件的场景,一步完成转换 + 写入,无需手动处理字符串。
import json
student = {
"name": "李四",
"age": 23,
"major": "人工智能"
}
# 打开文件,直接写入 JSON 数据
with open("student.json", "w", encoding="utf-8") as f:
# 参数:Python对象 + 文件对象 + 格式化参数
json.dump(student, f, ensure_ascii=False, indent=4)
# 执行后:桌面/代码目录会生成 student.json 文件
三、反序列化:JSON 格式 → Python 对象
反序列化就是把 JSON 数据,转回 Python 能直接操作的字典、列表,同样分解析字符串和读文件两种场景。
1. json.loads ():解析 JSON 字符串
适合处理接口返回的字符串、变量中的 JSON 数据,转回 Python 字典后可直接取值。
import json
# 模拟 JSON 字符串(比如接口返回的数据)
json_str = '''
{
"name": "张三",
"age": 22,
"major": "计算机科学",
"hobbies": ["编程", "篮球", "阅读"]
}
'''
# 转换为 Python 字典
python_dict = json.loads(json_str)
# 直接像字典一样取值
print("姓名:", python_dict["name"]) # 张三
print("年龄:", python_dict["age"]) # 22
print("类型:", type(python_dict)) # <class 'dict'>
2. json.load ():直接读取 JSON 文件
适合读取本地 JSON 配置文件、数据文件,一步完成读取 + 转换。
import json
# 读取刚才写入的 student.json 文件
with open("student.json", "r", encoding="utf-8") as f:
# 直接从文件转换为 Python 字典
python_dict = json.load(f)
print("读取文件数据:", python_dict)
print("专业:", python_dict["major"]) # 人工智能
四、新手必避的 3 个坑
坑 1:混淆 dump 和 dumps(报错根源)
- 想转字符串却用
json.dump()→ 报TypeError: dump() missing 1 required positional argument: 'fp' - 正确:转字符串用
dumps(),写文件用dump()
坑 2:中文乱码
必须加 ensure_ascii=False,否则中文会变成 \u5f20\u4e09 这类 Unicode 编码。
坑 3:JSON 格式不标准
JSON 语法严格:键必须用双引号,不能用单引号;最后一个元素后不能加逗号。
# 错误(单引号)
error_json = "{'name': '张三'}"
# 正确(双引号)
right_json = '{"name": "张三"}'
五、完整实战案例:数据读写闭环
import json
# 1. 定义 Python 数据
data = {
"title": "Python JSON 教程",
"author": "编程新手",
"content": "4个方法搞定 JSON 操作",
"like": 100
}
# 2. 序列化:转 JSON 字符串
json_str = json.dumps(data, ensure_ascii=False, indent=4)
print("序列化完成:\n", json_str)
# 3. 写入文件
with open("blog.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
# 4. 读取文件并反序列化
with open("blog.json", "r", encoding="utf-8") as f:
read_data = json.load(f)
# 5. 验证结果
print("\n读取文件后的数据:")
print(f"标题:{read_data['title']}")
print(f"作者:{read_data['author']}")
六、总结记忆口诀
序列化(转 JSON)
- 转字符串:
dumps带 s,内存操作最方便 - 写文件:
dump无 s,一步写入不麻烦
反序列化(转回 Python)
- 解析字符串:
loads带 s,快速取值超简单 - 读文件:
load无 s,文件读取一键转
中文保留加参数,ensure_ascii=False 别忘掉!
吃透这 4 个方法,Python 中所有 JSON 相关的操作都能轻松搞定,再也不用怕混淆和报错啦!
总结
- JSON 核心 4 方法:
dumps/dump/loads/load,带 s 操作字符串、无 s 操作文件; - 序列化:Python → JSON(
dumps转字符串、dump写文件); - 反序列化:JSON → Python(
loads解析字符串、load读文件); - 必加参数:
ensure_ascii=False保留中文,indent格式化输出。
更多推荐



所有评论(0)