ホームページ >バックエンド開発 >Python チュートリアル >FastAPI が JSON シリアル化を Flask とは異なる方法で処理するのはなぜですか?

FastAPI が JSON シリアル化を Flask とは異なる方法で処理するのはなぜですか?

DDD
DDDオリジナル
2024-12-07 07:40:16274ブラウズ

Why Does FastAPI Handle JSON Serialization Differently Than Flask?

FastAPI は Flask とは異なる JSON データを返すのはなぜですか?

間違ったアプローチ:

json.dumps を使用してオブジェクトをシリアル化する場合() FastAPI で返す前に、JSON は 2 回シリアル化されます。この二重シリアル化により、観測された文字列出力が発生します。

解決策 1: JSON 変換の単純な戻り値

これを修正するには、通常どおりデータ (辞書やリストなど) を返すだけです。 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
  }
]

解決策 2: 明示的な JSON のカスタム応答シリアル化

必要に応じて、オブジェクトをカスタム 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。