Python处理JSON核心是序列化(dumps/dump)与反序列化(loads/load),前者转对象为字符串或文件,后者反之;需注意编码、类型兼容性及安全性。
Python 中处理 JSON 数据,核心就是序列化(把 Python 对象转成 JSON 字符串)和反序列化(把 JSON 字符串转回 Python 对象)。关键在 json 模块的 dumps/loads 与 dump/load 四个函数,区别只在于操作对象是字符串还是文件。
用 json.dumps() 得到字符串,适合网络传输、日志记录或拼接;用 json.dump() 直接写入文件,省去手动打开写入步骤。
json.dumps(data, indent=2, ensure_ascii=False):加 indent 让输出美观,ensure_ascii=False 保留中文等非 ASCII 字符json.dump(data, open("data.json", "w", encoding="utf-8"), indent=2, ensure_ascii=False):直接保存为可读 JSON 文件TypeError;需通过 default 参数自定义转换逻辑json.loads() 解析字符串,json.load() 从文件对象读取并解析。两者都返回标准 Python 数据结构(dict、list、str、int、float、bool、None)。
data = json.loads('{"name": "张三", "age": 25}') → 得到字典 {'name': '张三', 'age': 25}
with open("data.json", encoding="utf-8") as f: data = json.load(f):安全读取文件内容并解析JSONDecodeError,建议用 try-except 捕获并提示原始出错位置JSON 标准不支持 Python 特有类型,需主动转换。推荐用 default 参数统一处理,而非提前遍历修改数据结构。
立即学习“Python免费学习笔记(深入)”;
datetime:在 default 函数中判断 isinstance(obj, datetime),返回 obj.isoformat()
Decimal:转为 float 或字符串,避免精度丢失(如 str(obj))to_json() 方法,并在 default 中调用,保持扩展性JSON 本质是文本,编码和来源可信度直接影响解析成败。
encoding="utf-8",Windows 默认编码可能引发乱码或解码错误eval() 或 ast.literal_eval() 解析 JSON 字符串——不安全且不标准pydantic 或简单 if "key" in data 判断),再使用