データ型(Pydanticモデルのような)をJSONと互換性のあるもの(dict
やlist
など)に変更する必要がある場合があります。
例えば、データベースに保存する必要がある場合です。
そのために、FastAPI はjsonable_encoder()
関数を提供しています。
JSON互換のデータのみを受信するデータベースfase_db
があるとしましょう。
例えば、datetime
オブジェクトはJSONと互換性がないので、このデーターベースには受け取られません。
そのため、datetime
オブジェクトはISO形式のデータを含むstr
に変換されなければなりません。
同様に、このデータベースはPydanticモデル(属性を持つオブジェクト)を受け取らず、dict
だけを受け取ります。
そのためにjsonable_encoder
を使用することができます。
Pydanticモデルのようなオブジェクトを受け取り、JSON互換版を返します:
{!../../../docs_src/encoder/tutorial001.py!}
この例では、Pydanticモデルをdict
に、datetime
をstr
に変換します。
呼び出した結果は、Pythonの標準のjson.dumps()
でエンコードできるものです。
これはJSON形式のデータを含む大きなstr
を(文字列として)返しません。JSONと互換性のある値とサブの値を持つPython標準のデータ構造(例:dict
)を返します。
!!! note "備考"
jsonable_encoder
は実際には FastAPI が内部的にデータを変換するために使用します。しかしこれは他の多くのシナリオで有用です。