这套课程按知识依赖排列。本篇的前置知识是:第 13、30 篇。学完后,你应该能够在 Python 对象和 JSON 文本之间转换。
本篇要解决的问题
本篇只处理“使用 JSON 保存结构化数据”这一件事。示例基于 Python 3.14.6,在 macOS 环境核验;除明确标注的终端命令外,代码本身只使用 Python 标准能力。
先看清一个容易误解的细节
json.dump 把字典和列表序列化为 JSON 文本,json.load 再把文本解析回 Python 对象。它们不是简单的字符串替换。
核心概念
- JSON 对象对应 Python 字典,JSON 数组对应列表。
ensure_ascii=False让中文以可读字符写入。- JSON 不支持任意 Python 对象;日期和自定义类需要先转换为基础结构。
跟着示例运行
把下面代码保存到本课脚本并运行:
import json
record = {"course": "Python", "progress": 60, "done": False}
writer = open("record.json", "w", encoding="utf-8")
json.dump(record, writer, ensure_ascii=False, indent=2)
writer.close()
reader = open("record.json", "r", encoding="utf-8")
loaded = json.load(reader)
reader.close()
print(loaded["course"], loaded["progress"])
预期结果:
Python 60
输出中包含环境路径、集合元素或日志格式时,具体文字和顺序可能随本机环境变化;判断是否成功应以本篇说明的关键结果为准。
按执行顺序拆开看
json.dump遍历字典的基础类型,把它们写成符合 JSON 语法的文本。json.load从文件解析文本,重新创建 Python 字典;读取结果不是原对象本身。
初学者容易混淆的地方
- 把 JSON 当作可以保存任意 Python 对象的格式,自定义类和日期需要先转换。
- 手工字符串拼接 JSON,容易产生转义、逗号和引号错误。
练习
- 保存包含两条学习记录的列表。
- 读取后修改进度,再重新写回文件。
练习应先独立完成,再通过增加 print 输出或检查文件内容观察中间状态。当前课程尚未讲到的能力,不要求提前搜索复杂写法。
本篇边界
本篇目标是在 Python 对象和 JSON 文本之间转换。没有展开的高级机制会放到后续课程;先确保能够解释示例中每一行代码,再进入下一篇。
相关文章
01|Python 程序从源码到输出经历了什么
面向按顺序学习 Python 的初学者,本篇在零基础上,帮助读者理解源代码、解释器和输出之间的关系。
02|在 macOS 安装并确认 Python 3 环境
面向按顺序学习 Python 的初学者,本篇在第 01 篇知识上,帮助读者在 macOS 中确认 Python 3.14 和 pip 是否可用。
03|交互式解释器和 Python 脚本怎么选择
面向按顺序学习 Python 的初学者,本篇在第 02 篇知识上,帮助读者根据任务选择 REPL 或 `.py` 脚本。
04|建立第一个 Python 项目目录
面向按顺序学习 Python 的初学者,本篇在第 03 篇知识上,帮助读者理解当前目录并正确运行项目脚本。

