開發 FastAPI 應用程式時,了解傳回 JSON 格式資料的細微差別至關重要。這需要深入研究 FastAPI 的內部工作原理並理解 JSON 序列化所扮演的角色。
問題的核心在於 json.dumps() 的使用在返回物件之前序列化物件。雖然這種方法看起來合乎邏輯,但它引入了冗餘序列化,因為 FastAPI 在回應產生期間自動對傳回值進行 JSON 編碼。這會導致 JSON 資料的字串表示看似不正確,而不是格式整齊的字典。
要修正此問題,您必須允許 FastAPI 處理 JSON 序列化過程。這可以透過直接傳回資料物件(字典、列表等)來實現。 FastAPI 將使用 jsonable_encoder 將它們無縫轉換為 JSON 相容的數據,並將其包裝在 JSONResponse 中。產生的回應將包含 application/json 編碼數據,確保所需的 JSON 格式。
如預期回傳資料物件:
@app.get('/') async def main(): return d
在幕後,FastAPI 將使用JSONResponse 序列化dict (d)並使用json.dumps().
如果需要精確控制回應,請直接使用Response物件:
@app.get('/') async def main(): return Response(content=json.dumps(d, indent=4, default=str), media_type='application/json')
這種方法授予您對media_type 的自由(例如,「application/json」),提供可自訂性。
注意: json.dumps() (str) 的預設參數允許日期時間物件的序列化。透過傳遞縮進,您可以控制 JSON 輸出的格式。
以上是如何在FastAPI應用程式中高效返回JSON格式的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!