首頁 >後端開發 >Python教學 >FastAPI返回JSON資料時如何避免雙重序列化?

FastAPI返回JSON資料時如何避免雙重序列化?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-28 07:50:12756瀏覽

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

FastAPI 如何處理JSON 資料

雙重序列化的陷阱

在FastAPI 中使用json.dumps() 傳回JSON 資料時,避免返回雙數序列化。 FastAPI 在背景執行自動序列化,因此手動呼叫 json.dumps() 可能會導致亂碼輸出,顯示為字串而不是 JSON。

傳回 JSON 資料的選項

選項 1:自動序列化

簡單地以字典、清單等形式傳回資料。 FastAPI 將使用其內建的 jsonable_encoder 自動將其轉換為 JSON 相容格式,並將其包裝在 JSONResponse 中。此方法可確保正確序列化並支援不可序列化物件(如日期時間)的序列化。

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 編碼器:
  • 考慮使用更快的第三方JSON編碼器(例如 Orjson)來提高效能。

以上是FastAPI返回JSON資料時如何避免雙重序列化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn