Last updated on
puython 函数对比:json.load() vs json.loads(); json.dump() vs json.dumps()
下面给你一篇结构清晰、偏工程实践的函数对比说明,非常适合做缓存 / 文件 / 网络数据处理的场景。
Python 函数对比:
json.load() vs json.loads()
json.dump() vs json.dumps()
Python 的 json 模块中,带 s 和不带 s 的函数,差别只有一个核心点:
是否直接处理「字符串(string)」
一、核心结论速览表(先看这个)
| 函数 | 输入 | 输出 | 使用场景 |
|---|---|---|---|
json.load() | 文件对象(file-like) | Python 对象 | 从 JSON 文件 读取 |
json.loads() | 字符串 str | Python 对象 | 从 JSON 字符串 解析 |
json.dump() | Python 对象 + 文件对象 | 写入文件 | 保存为 JSON 文件 |
json.dumps() | Python 对象 | 字符串 str | 转成 JSON 字符串 |
二、load vs loads(读)
1️⃣ json.load() —— 直接读文件
从文件对象(file object)中读取 JSON 文本,并解析成 Python 数据结构。只要对象有.read()方法,它就能被 json.load() 接受。
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
特点
- 参数是 文件对象
- 内部自动
f.read() - 自动解析 JSON
- 最适合本地文件 / 缓存文件
本质等价于
text = f.read()
data = json.loads(text)
2️⃣ json.loads() —— 解析内存中的字符串
字符串 → Python 对象 JSON 永远只是字符串形式存在,解析后才会变成 Python 对象。
text = '{"name": "Alice", "age": 18}'
data = json.loads(text)
特点
-
参数是 字符串
-
常用于:
- HTTP 响应
- 数据库字段
- 内存变量
工程建议(很重要)
如果你已经有文件对象 → 用
json.load()如果你已经有字符串 → 用json.loads()
不要多走一步。
三、dump vs dumps(写)
1️⃣ json.dump() —— 写入文件
data = {"name": "Alice", "age": 18}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
特点
-
直接写文件
-
不返回值
-
常用于:
- 缓存
- 配置
- 本地存储
2️⃣ json.dumps() —— 转成字符串
data = {"name": "Alice", "age": 18}
text = json.dumps(data, ensure_ascii=False)
特点
-
返回
str -
常用于:
- HTTP 请求体
- 日志
- 临时处理
四、名字里的 s 到底是什么意思?
s = string
| 函数 | 含义 |
|---|---|
loads | load string |
dumps | dump string |
这是 Python 标准库里非常统一的命名习惯。
五、典型使用场景对照(你现在就在用)
✅ 读取缓存文件(推荐)
try:
with open(CACHE_FILE, "r", encoding="utf-8") as f:
data = json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
data = []
✅ 解析网络返回内容
res = requests.get(url)
data = json.loads(res.text)
(或者更好:res.json())
✅ 写缓存文件
with open(CACHE_FILE, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
六、一句话记忆法
load / dump→ 文件loads / dumps→ 字符串