Marshmallow — это пакет Python, который может сериализовать, десериализовать и валидировать данные JSON.
Он полезен для веб-сервисов при обработке входящих JSON-данных и ответов в формате JSON.
Содержание
Установка
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install marshmallow
Примеры
Простой пример
Этот пример демонстрирует следующие возможности:
- Валидация и десериализация с помощью Schema.load().
- Предварительная обработка входных данных с помощью @post_load.
from marshmallow import Schema, fields, validate, post_load
class Person(Schema):
name = fields.Str(required=True)
gender = fields.Str(required=True, validate=validate.OneOf({"male", "female", "other"}))
email = fields.Email(required=True)
registration_datetime = fields.DateTime("%Y-%m-%dT%H:%M:%S%z")
@post_load
def convert_to_utc_datetime(self, data, **kwargs):
data["registration_datetime"] = data["registration_datetime"].astimezone(datetime.timezone.utc)
return data
person_schema = Person()
>>> person_data = {"name": "Tommy", "gender": "male", "email": "tommy@example.com", "registration_datetime": "2022-07-06T08:00:00+08:00"}
>>> person_schema.load(person_data)
{'gender': 'male',
'name': 'Tommy',
'registration_datetime': datetime.datetime(2022, 7, 6, 0, 0, tzinfo=datetime.timezone.utc),
'email': 'tommy@example.com'}
>>> invalid_person_data = {"name": "Tommy", "gender": "mmale", "email": "tommy@example.com", "registration_datetime": "2022-07-06T08:00:00+08:00"}
>>> person_schema.load(invalid_person_data)
ValidationError: {'gender': ['Must be one of: female, other, male.']}