JSON操作 #
一、基本操作 #
python
import json
# Python对象 -> JSON字符串
data = {"name": "Tom", "age": 25}
json_str = json.dumps(data)
print(json_str) # '{"name": "Tom", "age": 25}'
# JSON字符串 -> Python对象
data = json.loads(json_str)
print(data) # {'name': 'Tom', 'age': 25}
二、格式化输出 #
python
import json
data = {"name": "Tom", "age": 25, "skills": ["Python", "JavaScript"]}
# 缩进格式化
json_str = json.dumps(data, indent=2)
print(json_str)
# {
# "name": "Tom",
# "age": 25,
# "skills": [
# "Python",
# "JavaScript"
# ]
# }
# 排序键
json_str = json.dumps(data, indent=2, sort_keys=True)
三、文件操作 #
python
import json
# 写入JSON文件
data = {"name": "Tom", "age": 25}
with open('data.json', 'w') as f:
json.dump(data, f, indent=2)
# 读取JSON文件
with open('data.json') as f:
data = json.load(f)
四、自定义序列化 #
python
import json
from datetime import datetime
# 自定义编码器
class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
data = {"time": datetime.now()}
json_str = json.dumps(data, cls=DateTimeEncoder)
# 使用default参数
def encode_datetime(obj):
if isinstance(obj, datetime):
return obj.isoformat()
raise TypeError(f"Type {type(obj)} not serializable")
json_str = json.dumps(data, default=encode_datetime)
五、自定义反序列化 #
python
import json
from datetime import datetime
def decode_datetime(dct):
if 'time' in dct:
dct['time'] = datetime.fromisoformat(dct['time'])
return dct
json_str = '{"time": "2024-03-16T10:30:00"}'
data = json.loads(json_str, object_hook=decode_datetime)
六、类型映射 #
| Python | JSON |
|---|---|
| dict | object |
| list, tuple | array |
| str | string |
| int, float | number |
| True | true |
| False | false |
| None | null |
七、异常处理 #
python
import json
try:
data = json.loads('invalid json')
except json.JSONDecodeError as e:
print(f"JSON解析错误:{e}")
最后更新:2026-03-16