Spec-Zone.ru › FastAPI

Кодировщик, совместимый с JSON

В некоторых случаях может потребоваться преобразовать тип данных (например, модель Pydantic) во что-то совместимое с JSON (например, dict, list и т. д.).

Например, если нужно сохранить его в базе данных.

Для этого FastAPI предоставляет функцию jsonable_encoder().

Использование jsonable_encoder

Представим, что у вас есть база данных fake_db, которая принимает только данные, совместимые с JSON.

Например, она не принимает объекты datetime, поскольку они несовместимы с JSON.

Поэтому объект datetime нужно было бы преобразовать в str, содержащий данные в формате ISO.

Точно так же эта база данных не приняла бы модель Pydantic (объект с атрибутами), а только dict.

Для этого можно использовать jsonable_encoder.

Функция принимает объект, например модель Pydantic, и возвращает версию, совместимую с JSON:

from datetime import datetime

from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel

fake_db = {}


class Item(BaseModel):
    title: str
    timestamp: datetime
    description: str | None = None


app = FastAPI()


@app.put("/items/{id}")
def update_item(id: str, item: Item):
    json_compatible_item_data = jsonable_encoder(item)
    fake_db[id] = json_compatible_item_data

В этом примере она преобразует модель Pydantic в dict, а datetime — в str.

Результат её вызова можно закодировать с помощью стандартной функции Python json.dumps().

Функция не возвращает большую str с данными в формате JSON (в виде строки). Она возвращает стандартную структуру данных Python (например, dict) со значениями и вложенными значениями, совместимыми с JSON.

Примечание

jsonable_encoder фактически используется FastAPI внутри для преобразования данных. Но она полезна и во многих других случаях.

© 2018 Sebastián Ramírez
Licensed under the MIT License.
https://fastapi.tiangolo.com/tutorial/encoder/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API