間違ったアプローチ:
json.dumps を使用してオブジェクトをシリアル化する場合() FastAPI で返す前に、JSON は 2 回シリアル化されます。この二重シリアル化により、観測された文字列出力が発生します。
これを修正するには、通常どおりデータ (辞書やリストなど) を返すだけです。 FastAPI はこれを自動的に JSON に変換し、日時オブジェクトが適切に表現されるようにします。
例:
@app.get('/') async def main(): d = [ {"User": "a", "date": date.today(), "count": 1}, {"User": "b", "date": date.today(), "count": 2}, ] return d
出力:
[ { "User": "a", "date": "2023-01-09", "count": 1 }, { "User": "b", "date": "2023-01-09", "count": 2 } ]
必要に応じて、オブジェクトをカスタム Response オブジェクトで返す前に手動でシリアル化できます。 media_type を「application/json」に設定し、シリアル化されたデータを自分でエンコードします。
例:
import json @app.get('/') async def main(): d = [ {"User": "a", "date": date.today(), "count": 1}, {"User": "b", "date": date.today(), "count": 2}, ] json_str = json.dumps(d, indent=4, default=str) return Response(content=json_str.encode('utf-8'), media_type='application/json')
出力:
[ { "User": "a", "date": "2023-01-09", "count": 1 }, { "User": "b", "date": "2023-01-09", "count": 2 } ]
以上がFastAPI が JSON シリアル化を Flask とは異なる方法で処理するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。