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

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

DDD
发布: 2024-12-07 07:40:16
原创
269 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板