ホームページ >バックエンド開発 >Python チュートリアル >FastAPI で JSON データを返すときに二重シリアル化を回避するにはどうすればよいですか?

FastAPI で JSON データを返すときに二重シリアル化を回避するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-28 07:50:12757ブラウズ

How Can I Avoid Double Serialization When Returning JSON Data in FastAPI?

FastAPI による JSON データの処理方法

二重シリアル化の落とし穴

json.dumps() を使用して FastAPI で JSON データを返すときは、次のことを避けてください。ダブル連載。 FastAPI はバックグラウンドで自動シリアル化を実行するため、json.dumps() を手動で呼び出すと出力が文字化けし、JSON ではなく文字列として表示される可能性があります。

JSON データを返すためのオプション

オプション 1: 自動シリアル化

単純にデータを辞書として返します。 FastAPI は、組み込みの jsonable_encoder を使用してこれを JSON 互換形式に自動的に変換し、JSONResponse でラップします。このアプローチにより、適切なシリアル化と、datetime などのシリアル化不可能なオブジェクトのシリアル化のサポートが保証されます。

from datetime import date

data = [{"User": "a", "date": date.today(), "count": 1}]

@app.get('/')
async def main():
    return data

オプション 2: カスタム シリアル化

特定のシナリオでは、手動シリアル化が必要になる場合があります。必要なことだ。その場合は、メディア タイプを application/json に設定してカスタム Response オブジェクトを返すことを検討してください。

import json

@app.get('/')
async def main():
    json_str = json.dumps(data, indent=4, default=str)
    return Response(content=json_str, media_type='application/json')

その他の考慮事項

  • ステータス コードのカスタマイズ: Response.status_code 属性を使用して、JSON のカスタム ステータス コードを設定します。
  • 代替 JSON エンコーダ: パフォーマンスを向上させるために、Orjson などの高速なサードパーティ JSON エンコーダの使用を検討してください。

以上がFastAPI で JSON データを返すときに二重シリアル化を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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