JSON 数据处理
json.dumps/loads、文件读写、自定义编码器、datetime 序列化
JSON 数据处理
JSON 是互联网数据交换的标准格式。Python 内置 json 模块,轻松实现 Python 对象 ↔ JSON 互转。
学完本章你将掌握: loads/dumps、文件读写、美化输出、自定义序列化。
一、JSON → Python(反序列化)
python
import json
json_str = '{"name":"小明","age":20,"scores":[90,85,88]}'
data = json.loads(json_str)
print(data["name"]) # 小明
print(data["scores"][0]) # 90
JSON 与 Python 类型映射:
| JSON | Python |
|---|---|
| `{}` | dict |
| `[]` | list |
| `"str"` | str |
| `123` | int |
| `1.5` | float |
| `true/false` | True/False |
| `null` | None |
二、Python → JSON(序列化)
python
data = {"name": "小明", "age": 20, "skills": ["Python"]}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str) # {"name": "小明", "age": 20, "skills": ["Python"]}
⚠️:
ensure_ascii=False确保中文正常显示,不加的话中文会变成\uXXXX。
三、美化输出与紧凑格式
python
data = {"name": "小明", "skills": ["Python", "Java"]}
# 缩进排版
print(json.dumps(data, indent=2, ensure_ascii=False))
# 紧凑格式(适合网络传输)
print(json.dumps(data, separators=(",", ":"), ensure_ascii=False))
四、文件读写
python
data = {"name": "小明", "age": 20}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
with open("data.json", "r", encoding="utf-8") as f:
loaded = json.load(f)
五、排序和自定义
python
print(json.dumps({"c":3,"a":1,"b":2}, sort_keys=True)) # {"a":1,"b":2,"c":3}
小结
json.loads()字符串 → 对象,json.dumps()对象 → 字符串json.load/dump用于文件ensure_ascii=False正确处理中文indent美化,separators紧凑