在 Python 中使用 json 模块的完整指南
json
模块是 Python 标准库的一部分,用于处理 JSON 数据格式。以下是核心操作:
1. 导入模块
python
import json
2. 序列化操作(Python → JSON)
a. 字典转 JSON 字符串
python
data = {
"name": "小明",
"age": 20,
"courses": ["数学", "英语"]
}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)
输出:
json
{
"name": "小明",
"age": 20,
"courses": ["数学", "英语"]
}
参数说明:
ensure_ascii=False
:支持中文显示indent=2
:美化输出格式
b. 直接写入文件
python
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
3. 反序列化操作(JSON → Python)
a. JSON 字符串转字典
python
json_data = '{"name": "小红", "score": 95}'
python_dict = json.loads(json_data)
print(python_dict["name"]) # 输出:小红
b. 从文件读取
python
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
print(data["courses"][0]) # 输出:数学
4. 处理特殊数据类型
JSON 不支持 Python 的所有数据类型,需自定义处理:
python
class User:
def __init__(self, name, age):
self.name = name
self.age = age
# 自定义序列化
def user_encoder(obj):
if isinstance(obj, User):
return {"name": obj.name, "age": obj.age}
raise TypeError("Object not serializable")
user = User("张三", 30)
json_str = json.dumps(user, default=user_encoder, ensure_ascii=False)
5. 注意事项
-
JSON 键必须是字符串类型
-
支持的数据类型对应关系:
Python JSON dict object list/tuple array str string int/float number True/False true/false None null -
处理日期等特殊类型需手动转换
提示:使用
try-except
处理解析错误:
pythontry: data = json.loads(invalid_json) except json.JSONDecodeError as e: print(f"解析错误: {e}")
典型应用场景
- API 数据传输
- 配置文件读写
- 数据持久化存储
- 不同语言系统间数据交换