JSON是一种轻量级数据交换格式,Python 中常用多种库来解析和处理 JSON 数据
jsonPython 内置的 json 库是处理 JSON 最基础、最常用的工具
json.dumps():将 Python 对象转换为 JSON 字符串json.loads():将 JSON 字符串转换为 Python 对象json.dump():将 Python 对象写入 JSON 文件json.load():从 JSON 文件读取数据并转换为 Python 对象import json
# 1. Python 字典转 JSON
data = {"name": "拾光", "age": 18, "hobbies": ["reading", "coding"]}
json_str = json.dumps(data, indent=2, ensure_ascii=False) # indent 格式化输出,ensure_ascii 保留中文
print(json_str)
# 2. JSON 字符串转 Python 字典
json_str = '{"name": "小明", "age": 30, "is_student": false}'
python_data = json.loads(json_str)
print(python_data["name"])
# 3. 写入
withopen("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=2, ensure_ascii=False)
# 4. 读取
withopen("data.json", "r", encoding="utf-8") as f:
file_data = json.load(f)
print(file_data["hobbies"]) # 输出:['reading', 'coding']demjson 库demjson 是一个第三方库,以宽容的方式解析 JSON,支持非标准格式,比如缺少引号、包含注释
pip install demjsondemjson.encode():类似 json.dumps()demjson.decode():类似 json.loads(),容错性更强import demjson
# 解析非标准 JSON(缺少引号、包含注释)
non_standard_json = """{
name: "拾光", # 这里键名缺少引号
age: 18
}"""
# 用 demjson 解析(不会报错)
data = demjson.decode(non_standard_json)
print(data["name"])
# 转换为 JSON 字符串
json_str = demjson.encode(data, indent=2)
print(json_str)simplejson 库simplejson 是 json 标准库的增强版,支持更多数据类型和优化性能。
pip install simplejson与 json 库 API 几乎一致,额外支持更多数据类型转换(如 datetime、decimal)
import simplejson as json
from datetime import datetime
# 1. 序列化 datetime(将 datetime 转换为 ISO 格式字符串)
data = {"time": datetime(2025, 8, 12, 12, 0)}
# 使用 default 参数指定 datetime 的转换逻辑
json_str = json.dumps(
data,
indent=2,
default=lambda obj: obj.isoformat() ifisinstance(obj, datetime) else obj
)
print("序列化结果:")
print(json_str)
# 2. 反序列化(将 ISO 字符串还原为 datetime)
parsed_data = json.loads(
json_str,
object_hook=lambda d: {
k: datetime.fromisoformat(v) if k == "time"andisinstance(v, str) else v
for k, v in d.items()
}
)
print("\n反序列化结果:")
print(parsed_data["time"]) # 输出 datetime 对象
print(type(parsed_data["time"])) # 确认类型为 datetimeujson 库ujson是一个高性能 JSON 解析库,基于 C 扩展实现,速度极快。
pip install ujsonAPI 与 json 库一致,主打高性能解析。
示例
import ujson
data = {"name": "小王", "scores": [90, 85, 95]}
json_str = ujson.dumps(data, indent=2)
print(json_str)
# 快速反序列化
parsed_data = ujson.loads(json_str)
print(parsed_data["scores"]) # 输出:[90, 85, 95]json 库,无需额外依赖,满足大多数需求。demjson 解析不规范的 JSON 数据(如带注释、缺少引号)。嘿嘿重点推荐这个ujson,提升解析速度。datetime 等特殊类型时,用 simplejson。#Python