登录
首页 >  文章 >  python教程

PythonJSON序列化与反序列化教程

时间:2026-04-30 22:22:31 257浏览 收藏

本文深入解析了Python中JSON序列化与反序列化的核心机制,涵盖json.dumps()/dump()和loads()/load()四大函数的实用技巧、中文编码处理、常见类型(如datetime、Decimal、自定义类)的兼容性解决方案,以及关键的安全注意事项——从避免eval解析、强制UTF-8编码,到外部数据校验与敏感信息防护,助你安全、高效、健壮地在Python项目中驾驭JSON数据流转。

PythonJSON数据处理_序列化反序列化说明【指导】

Python 中处理 JSON 数据,核心就是序列化(把 Python 对象转成 JSON 字符串)和反序列化(把 JSON 字符串转回 Python 对象)。关键在 json 模块的 dumps/loadsdump/load 四个函数,区别只在于操作对象是字符串还是文件。

序列化:Python 对象 → JSON 字符串或文件

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 文件
  • 注意:不支持 set、datetime、自定义类等类型,会报 TypeError;需通过 default 参数自定义转换逻辑

反序列化:JSON 字符串或文件 → Python 对象

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 捕获并提示原始出错位置

处理常见不兼容类型(如 datetime、Decimal)

JSON 标准不支持 Python 特有类型,需主动转换。推荐用 default 参数统一处理,而非提前遍历修改数据结构。

  • datetime:在 default 函数中判断 isinstance(obj, datetime),返回 obj.isoformat()
  • Decimal:转为 float 或字符串,避免精度丢失(如 str(obj)
  • 自定义类可定义 to_json() 方法,并在 default 中调用,保持扩展性

安全与编码注意事项

JSON 本质是文本,编码和来源可信度直接影响解析成败。

  • 读文件务必指定 encoding="utf-8",Windows 默认编码可能引发乱码或解码错误
  • 不要用 eval()ast.literal_eval() 解析 JSON 字符串——不安全且不标准
  • 来自外部(如 API、用户输入)的 JSON 数据,应先校验结构(可用 pydantic 或简单 if "key" in data 判断),再使用
  • 敏感字段(如密码、token)不应直接序列化进日志或调试输出

今天关于《PythonJSON序列化与反序列化教程》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>