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
🤓 Другие версии и варианты
from datetime import datetime
from typing import Union

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

fake_db = {}


class Item(BaseModel):
    title: str
    timestamp: datetime
    description: Union[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