在 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 相关的操作都能轻松搞定,再也不用怕混淆和报错啦!

总结

  1. JSON 核心 4 方法:dumps/dump/loads/load,带 s 操作字符串、无 s 操作文件;
  2. 序列化:Python → JSON(dumps转字符串、dump写文件);
  3. 反序列化:JSON → Python(loads解析字符串、load读文件);
  4. 必加参数:ensure_ascii=False 保留中文,indent 格式化输出。
Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐