首页 >后端开发 >Python教程 >为什么 FastAPI 处理 JSON 序列化的方式与 Flask 不同?

为什么 FastAPI 处理 JSON 序列化的方式与 Flask 不同?

DDD
DDD原创
2024-12-07 07:40:16271浏览

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
  }
]

解决方案 2:显式 JSON 的自定义响应序列化

如有必要,您可以在自定义 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn