JSON 是什么
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。在 Python 中,它的结构非常直观——本质上就是字典和列表的组合。你可以把 JSON 理解为一种通用的文本格式,用来在不同系统、不同语言之间传递结构化数据。
Python 中的 json 模块
Python 标准库自带了 json 模块,专门用于处理这种格式。它提供了四个核心方法,分为序列化和反序列化两类:
- 序列化:将 Python 对象转换为 JSON 字符串或文件。
- 反序列化:将 JSON 字符串或文件还原为 Python 对象。
这四个方法分别是 dumps、dump、loads、load。虽然名字很像,但使用场景有细微差别,用错了容易踩坑。
序列化:dumps 与 dump
这两个方法都负责把 Python 对象变成 JSON 格式,区别在于输出目标不同。
dumps (dump string)
dumps 是内存操作,直接把对象转成字符串。适合需要进一步处理字符串、或者打印调试的场景。
import json
data = {"name": "张三", "age": 25, "skills": ["Python", "Java"]}
json_str = json.dumps(data)
print(json_str)
运行结果会是一个标准的 JSON 字符串。注意默认情况下,中文会被转义成 Unicode 编码(如 \u4e09),如果需要直接显示中文,可以设置 ensure_ascii=False。
dump (dump file)
dump 则多了一个参数,要求传入一个文件描述符。它会把序列化后的内容直接写入文件,省去了手动打开文件的步骤。
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
这里用了 indent=4,让生成的 JSON 文件可读性更强,方便人工查看。实际开发中,保存配置或日志时经常用到这个功能。
反序列化:loads 与 load
反过来,从外部获取数据时,我们通常用这两个方法把 JSON 变回 Python 对象。
loads (load string)
对应 dumps,接收字符串并返回 Python 对象。
json_str = '{"name": "李四", "active": true}'
parsed_data = json.loads(json_str)
(parsed_data[])

