首頁 > 後端開發 > Python教學 > 為什麼 FastAPI 處理 JSON 序列化的方式與 Flask 不同?

為什麼 FastAPI 處理 JSON 序列化的方式與 Flask 不同?

DDD
發布: 2024-12-07 07:40:16
原創
268 人瀏覽過

Why Does FastAPI Handle JSON Serialization Differently Than Flask?

為什麼 FastAPI 回傳 JSON 資料與 Flask 不同?

錯誤的方法:

使用 json.dumps 序列化物件時() 在 FastAPI 中傳回它們之前,JSON 會被序列化兩次。這種雙重序列化會導致觀察到的字串輸出。

解決方案 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
  }
]
登入後複製
登入後複製

解決方案響應序列化

如有必要,您可以在自訂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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板