开发 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中文网其他相关文章!