大家好,我是木木。今天给大家分享一个超酷的 Python 库,Marshmallow。
Marshmallow 是一个用于对象序列化和反序列化的库,帮助开发者轻松转换复杂的数据结构。通过 Marshmallow,您可以将 Python 对象转换为 JSON 格式,或将 JSON 数据转换回 Python 对象,从而简化数据处理和 API 开发。

核心特点
-
对象序列化和反序列化 -
自动将复杂的 Python 对象转换为 JSON,或将 JSON 数据转换回 Python 对象。 -
数据验证 -
支持数据验证和清理,确保数据的一致性和准确性。 -
灵活性和可扩展性 -
提供灵活的自定义选项,适应各种数据处理需求。
最佳实践
项目地址:https://github.com/marshmallow-code/marshmallow
安装方法
pip install marshmallow
易于上手的功能
定义基本序列化和反序列化
Marshmallow 可以快速定义数据模型,并实现对象的序列化和反序列化。以下是一个示例代码:
from marshmallow import Schema, fields
# 定义数据模型
class UserSchema(Schema):
name = fields.String(required=True)
age = fields.Integer(required=True)
# 创建数据对象
user_data = {"name": "John", "age": 30}
# 序列化数据对象
user_schema = UserSchema()
user_json = user_schema.dump(user_data)
print(user_json)
# 输出:{'name': 'John', 'age': 30}
# 反序列化 JSON 数据
user_obj = user_schema.load(user_json)
print(user_obj)
# 输出:{'name': 'John', 'age': 30}
嵌套数据模型
Marshmallow 支持嵌套的数据模型,方便管理复杂的数据结构。以下是一个示例代码:
from marshmallow import Schema, fields
# 定义嵌套数据模型
class FriendSchema(Schema):
name = fields.String(required=True)
age = fields.Integer(required=True)
class UserSchema(Schema):
name = fields.String(required=True)
age = fields.Integer(required=True)
friends = fields.List(fields.Nested(FriendSchema))
# 创建数据对象
user_data = {
"name": "John",
"age": 30,
"friends": [{"name": "Doe", "age": 25}, {"name": "Smith", "age": 28}]
}
# 序列化数据对象
user_schema = UserSchema()
user_json = user_schema.dump(user_data)
print(user_json)
# 输出:{'name': 'John', 'age': 30, 'friends': [{'name': 'Doe', 'age': 25}, {'name': 'Smith', 'age': 28}]}
# 反序列化 JSON 数据
user_obj = user_schema.load(user_json)
print(user_obj)
# 输出:{'name': 'John', 'age': 30, 'friends': [{'name': 'Doe', 'age': 25}, {'name': 'Smith', 'age': 28}]}
高级功能
自定义验证器和数据处理
Marshmallow 支持自定义验证器和数据处理逻辑,以下是一个示例代码,展示如何使用自定义验证器:
from marshmallow import Schema, fields, validates, ValidationError
# 定义数据模型和自定义验证器
class UserSchema(Schema):
name = fields.String(required=True)
age = fields.Integer(required=True)
email = fields.Email(required=True)
@validates('name')
def validate_name(self, value):
if not value.istitle():
raise ValidationError('Name must be capitalized')
# 创建数据对象
user_data = {"name": "john", "age": 30, "email": "john@example.com"}
# 反序列化并验证数据对象
try:
user_schema = UserSchema()
user_obj = user_schema.load(user_data)
except ValidationError as err:
print(err.messages)
# 输出:{'name': ['Name must be capitalized']}
小总结
Marshmallow 是一个超酷且强大的对象序列化和反序列化库,适用于各种数据处理需求。通过使用 Marshmallow,您可以轻松实现数据验证和转换,提高代码的健壮性和可维护性。
—— End ——
原文始发于微信公众号(木木夕咦):Marshmallow,一个超酷的python库
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/291425.html