Marshmallow,一个超酷的python库

Marshmallow,一个超酷的python库

大家好,我是木木。今天给大家分享一个超酷的 Python 库,Marshmallow

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

Marshmallow,一个超酷的python库
图源网络

核心特点

  • 对象序列化和反序列化
    • 自动将复杂的 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

(0)
追风少年潇歌的头像追风少年潇歌

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!