Перейти до змісту

JSON-сумісний кодувальник

🌐 Переклад ШІ та людьми

Цей переклад виконано ШІ під керівництвом людей. 🤝

Можливі помилки через неправильне розуміння початкового змісту або неприродні формулювання тощо. 🤖

Ви можете покращити цей переклад, допомігши нам краще спрямовувати AI LLM.

Англійська версія

Існують випадки, коли вам може знадобитися перетворити тип даних (наприклад, модель Pydantic) на щось сумісне з JSON (наприклад, dict, list тощо).

Наприклад, якщо вам потрібно зберегти це в базі даних.

Для цього FastAPI надає функцію jsonable_encoder().

Використання jsonable_encoder

Давайте уявимо, що у вас є база даних fake_db, яка приймає лише дані, сумісні з JSON.

Наприклад, вона не приймає об'єкти типу datetime, оскільки вони не сумісні з JSON.

Отже, об'єкт типу datetime потрібно перетворити на str, який містить дані в форматі ISO.

Так само ця база даних не прийматиме модель Pydantic (об'єкт з атрибутами), а лише dict.

Ви можете використовувати jsonable_encoder для цього.

Вона приймає об'єкт, такий як модель Pydantic, і повертає його версію, сумісну з JSON:

fromdatetimeimport datetime
fromfastapiimport FastAPI
fromfastapi.encodersimport jsonable_encoder
frompydanticimport BaseModel
fake_db = {}
classItem(BaseModel):
 title: str
 timestamp: datetime
 description: str | None = None
app = FastAPI()
@app.put("/items/{id}")
defupdate_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 внутрішньо для перетворення даних. Проте вона корисна в багатьох інших сценаріях.

AltStyle によって変換されたページ (->オリジナル) /