Я хотел бы использовать pydantic для обработки данных (двунаправленно) между API и хранилищем данных, поскольку он обеспечивает хорошую поддержку нескольких интересующих меня типов, которые изначально не сериализуются в формате JSON. Он имеет лучшую поддержку чтения/проверки, чем текущий подход, но мне также нужно создать сериализуемые в формате json объекты dict для записи.
Код: Выделить всё
from uuid import UUID, uuid4
from pydantic import BaseModel
class Model(BaseModel):
the_id: UUID
instance = Model(the_id=uuid4())
print("1: %s" % instance.dict()
print("2: %s" % instance.json()
печатает
Код: Выделить всё
{'the_id': UUID('4108356a-556e-484b-9447-07b56a664763')}
>>> inst.json()
'{"the_id": "4108356a-556e-484b-9447-07b56a664763"}'
Мне хотелось бы следующее:
Код: Выделить всё
{"the_id": "4108356a-556e-484b-9447-07b56a664763"} # eg "json-compatible" dict
Похоже, что хотя в pydantic есть все сопоставления, я не могу найти никакого использования сериализации за пределами стандартного json ~рекурсивного кодировщика (
) в pydantic/main.py. но я бы предпочел использовать одну библиотеку как для проверки raw->obj (pydantic отлично справляется с этим), так и для obj->raw(dict), чтобы мне не приходилось управлять несколькими сопоставлениями сериализации. Полагаю, я мог бы реализовать что-то похожее на использование кодировщика json, но это должно быть обычным вариантом использования?
Другие подходы, такие как классы данных (встроенные) + библиотеки, такие как dataclasses_jsonschema, обеспечивают эту ~сериализацию для JSON-ready dict, но опять же, надеясь использовать pydantic для более надежной проверки ввода, сохраняя при этом симметричность.
Подробнее здесь:
https://stackoverflow.com/questions/656 ... son-string