登录
首页 >  文章 >  python教程

PythonJSON序列化反序列化全解析

时间:2026-01-31 17:34:35 412浏览 收藏

大家好,我们又见面了啊~本文《PythonJSON序列化与反序列化详解》的内容中将会涉及到等等。如果你正在学习文章相关知识,欢迎关注我,以后会给大家带来更多文章相关文章,希望我们能一起进步!下面就开始本文的正式内容~

Python处理JSON核心是序列化(dumps/dump)与反序列化(loads/load),前者转对象为字符串或文件,后者反之;需注意编码、类型兼容性及安全性。

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)不应直接序列化进日志或调试输出

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>