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()字符串 strPython 对象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

函数含义
loadsload string
dumpsdump 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 → 字符串