Python: JSON 数据处理

最后更新:2026-09-22

JSON(JavaScript Object Notation)是 Web 上最通用的数据交换格式。几乎所有 Web API 都返回 JSON 数据。Python 的 json 模块可以轻松地在 Python 对象和 JSON 字符串之间转换。


相关内置函数:object float bool dict list None int str

1. Python 对象 ↔ JSON 字符串

▶ 示例:序列化为 JSON 字符串

▶ 试一试

输出:

TEXT 📖 仅展示
# 执行成功

运行结果:

JSON
{
  "name": "Alice",
  "age": 25,
  "is_student": false,
  "scores": [85, 92, 78],
  "address": null
}
💡 ensure_ascii=False 很重要: 不加这个参数,中文字符会被转成 Unicode 编码(\u5f20\u4e09)。加上后保留原始中文。indent=2 让输出格式化,方便阅读。生产环境中可以用 indent=None 压缩成一行,节省带宽。



2. JSON 字符串 → Python 对象(反序列化)

▶ 示例:反序列化 JSON 字符串

▶ 试一试

输出:

TEXT 📖 仅展示
# 执行成功

(1) JSON 类型与 Python 类型的对应

JSON Python
string str
number int / float
boolean bool
null None
array list
object dict


3. JSON 文件读写

▶ 示例:JSON 文件读写

▶ 试一试

输出:

TEXT 📖 仅展示
# 执行成功

▶ 示例:数据持久化(难度⭐⭐)

▶ 试一试

输出:

TEXT 📖 仅展示
暂无笔记


4. 处理复杂数据类型

默认情况下,json 模块只支持基本类型。自定义对象需要手动转换:

▶ 示例:自定义序列化

▶ 试一试

输出:

TEXT 📖 仅展示
# 函数定义成功


5. 常见应用场景


相关内置函数:object float bool dict list None int str

❓ 常见问题

Q json.dumps() 和 json.dump() 有什么区别?
A dumps() 返回 JSON 字符串(s 代表 string),dump() 直接写入文件对象。同理,loads() 从字符串解析,load() 从文件对象读取。s 后缀表示 string。
Q JSON 文件比 CSV 文件好在哪里?
A JSON 支持嵌套结构(字典中套列表、列表中套字典),CSV 只能表示平面表格。JSON 自动保留数据类型(数字、布尔值、null),CSV 所有值都是字符串。JSON 可读性更好。缺点是 JSON 文件通常比 CSV 大。
Q ensure_ascii=False 不设置会怎样?
A 中文字符会被转义成 \uXXXX 格式。程序功能不受影响——json.loads() 会自动还原。但对于人类阅读来说,转义后的内容完全不可读。所以在需要手动查看 JSON 文件时,记得加 ensure_ascii=False。

📖 小节


📝 作业

  1. 基础题(难度⭐):创建一个字典,包含你的名字、年龄、三个爱好(列表),用 json.dumps() 输出格式化的 JSON 字符串(保留中文、缩进 2 格)。

  2. 进阶题(难度⭐⭐):写两个函数:save_contacts(contacts) 和 load_contacts(),把通讯录(列表嵌套字典)保存到 contacts.json,程序启动时自动加载。每个联系人包含姓名、电话、邮箱。

  3. 挑战题(难度⭐⭐⭐):用 JSON 实现一个"简易数据导出器"。给定一个学生成绩的列表 students = [{"name": "Alice", "scores": {"语文": 85, "数学": 92}}],分别输出为:① 格式化的 JSON 文件;② 压缩成一行(无缩进)的 JSON 字符串;③ 带排序键(sort_keys=True)的 JSON 字符串。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏