Pydantic преобразовать в jsonable dict (не полную строку json)Python

Программы на Python
Ответить
Anonymous
 Pydantic преобразовать в jsonable dict (не полную строку json)

Сообщение Anonymous »

Я хотел бы использовать 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 ~рекурсивного кодировщика (

Код: Выделить всё

json.dumps( ... default=pydantic_encoder)
) в pydantic/main.py. но я бы предпочел использовать одну библиотеку как для проверки raw->obj (pydantic отлично справляется с этим), так и для obj->raw(dict), чтобы мне не приходилось управлять несколькими сопоставлениями сериализации. Полагаю, я мог бы реализовать что-то похожее на использование кодировщика json, но это должно быть обычным вариантом использования?
Другие подходы, такие как классы данных (встроенные) + библиотеки, такие как dataclasses_jsonschema, обеспечивают эту ~сериализацию для JSON-ready dict, но опять же, надеясь использовать pydantic для более надежной проверки ввода, сохраняя при этом симметричность.

Подробнее здесь: https://stackoverflow.com/questions/656 ... son-string
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»