marshmallow:Python 对象序列化这件事,它替你包圆了
marshmallow:Python 对象序列化这件事,它替你包圆了
marshmallow 在 GitHub 上已有 7,240 Star。
它是一个与 ORM、ODM 和框架无关的 Python 库,核心任务只有一个:把复杂的 Python 对象转成字典、JSON 这类原生数据类型,或者反向把原始数据还原成对象。序列化、反序列化、输入验证,这些活儿它一包到底。
1、这玩意儿是干嘛的
一句话说:给 Python 对象和数据格式之间搭一座桥。
你有一个嵌套了日期、字符串、自定义类的对象,想转成 JSON 发给前端,或者从 API 收到的 JSON 想变成 Python 对象再做业务处理,marshmallow 用 Schema 定义好字段规则,一行代码完成转换。

Schema 支持字段校验、类型转换、嵌套结构。字段类型覆盖字符串、整数、浮点、日期、列表、嵌套对象等常用类型。你定义一次规则,序列化和反序列化都能复用。验证失败时会抛出 ValidationError,错误信息包含具体字段和失败原因,方便定位问题。
2、为什么要用它
Python 生态里处理数据转换的选择不少,但大部分要么绑定了特定框架,要么只做一半。Django REST framework 的序列化器离不开 Django,Pydantic 侧重校验和类型提示,而 marshmallow 的定位是纯粹的对象序列化工具,不依赖任何上层框架。

它把三件事做到了一起:校验输入数据、反序列化为应用对象、序列化为原始 Python 类型。输出结果可以直接送给 json.dumps() 变成 JSON 字符串。不需要你在多个工具之间来回切换。
另一个实用点是它的生态系统。围绕 marshmallow 已经衍生出不少扩展库,支持 SQLAlchemy 集成、JSON Schema 生成、Web 框架集成等场景,官方 wiki 里有完整的列表可供查阅。
3、核心用法
安装:
pip install -U marshmallow
定义 Schema:
from datetime import date
from marshmallow import Schema, fields
class ArtistSchema(Schema):
name = fields.Str()
class AlbumSchema(Schema):
title = fields.Str()
release_date = fields.Date()
artist = fields.Nested(ArtistSchema())
bowie = dict(name="David Bowie")
album = dict(artist=bowie, title="Hunky Dory", release_date=date(1971, 12, 17))
schema = AlbumSchema()
result = schema.dump(album)
print(result)
# {'artist': {'name': 'David Bowie'}, 'release_date': '1971-12-17', 'title': 'Hunky Dory'}
Nested 字段让嵌套对象的处理变得直接。ArtistSchema 被嵌进 AlbumSchema,序列化时层级结构保持完整。dump() 负责序列化,load() 负责反序列化,两个方向共用同一套 Schema 定义。
4、适合哪些人用
- 需要把 Python 对象序列化为 JSON 或其他格式输出的后端开发者
- 从 API 接收原始数据后需要校验并转换为内部对象的工程师
- 希望序列化逻辑与框架解耦、能在不同项目间复用代码的人
者
- 从 API 接收原始数据后需要校验并转换为内部对象的工程师
- 希望序列化逻辑与框架解耦、能在不同项目间复用代码的人
更多推荐
所有评论(0)