Python 中如何把 JSON 数据写入文件?
Python 写 JSON 文件:json.dump(data, file) 直接写入;常用参数 indent=4 美化、ensure_ascii=False 保留中文。本文介绍完整写法及读取方式。
用 json.dump(data, f):打开文件后以写模式传入文件对象即可。常用参数:indent=4 美化格式、ensure_ascii=False 保留中文原文。
基本写法
import json
data = {
"name": "张三",
"age": 35,
"city": "杭州"
}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=4, ensure_ascii=False)
with语句自动关闭文件;ensure_ascii=False让中文直接写入(默认会转成\uXXXX);indent=4让文件内容带缩进、人可读;省略则写成单行紧凑格式。
读回来
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(data["name"]) # 张三
dump 与 dumps 的区别
json.dump(data, f) # 直接写入文件对象
json.dumps(data) # 返回 JSON 字符串,自己决定写哪
一行一个 JSON 对象(JSONL)
日志/数据流场景常用 JSON Lines 格式:
with open("data.jsonl", "w", encoding="utf-8") as f:
for record in records:
f.write(json.dumps(record, ensure_ascii=False) + "\n")
常见问题(FAQ)
Q:写入中文变成 \u4e2d\u6587?
A:加 ensure_ascii=False,并确保文件以 encoding="utf-8" 打开。
Q:datetime 对象不能直接 dump?
A:对,JSON 不支持日期类型。先转字符串:data["time"] = dt.isoformat();或自定义 encoder。
Q:文件已存在会怎样?
A:"w" 模式覆盖原文件。追加用 "a"(适合 JSONL 格式,普通 JSON 文件追加会产生非法内容)。