コンテンツにスキップ

JSON互換エンコーダ

🌐 AI と人間による翻訳

この翻訳は、人間のガイドに基づいて AI によって作成されました。🤝

原文の意図を取り違えていたり、不自然な表現になっている可能性があります。🤖

AI LLM をより適切に誘導するのを手伝う ことで、この翻訳を改善できます。

英語版

データ型(Pydanticモデルのような)をJSONと互換性のあるもの(dictlistなど)に変換する必要があるケースがあります。

例えば、データベースに保存する必要がある場合です。

そのために、FastAPIjsonable_encoder()関数を提供しています。

jsonable_encoderの使用

JSON互換のデータのみを受信するデータベースfake_dbがあるとしましょう。

例えば、datetimeオブジェクトはJSONと互換性がないので、受け取られません。

そのため、datetimeオブジェクトはISO形式のデータを含むstrに変換されなければなりません。

同様に、このデータベースは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に、datetimestrに変換します。

呼び出した結果は、Pythonの標準のjson.dumps()でエンコードできるものです。

これはJSON形式のデータを含む大きなstrを(文字列として)返しません。JSONと互換性のある値とサブの値を持つPython標準のデータ構造(例:dict)を返します。

備考

jsonable_encoderは実際には FastAPI が内部的にデータを変換するために使用します。しかしこれは他の多くのシナリオで有用です。