Home >Backend Development >Python Tutorial >Why Does FastAPI Handle JSON Serialization Differently Than Flask?

Why Does FastAPI Handle JSON Serialization Differently Than Flask?

DDD
DDDOriginal
2024-12-07 07:40:16271browse

Why Does FastAPI Handle JSON Serialization Differently Than Flask?

Why is FastAPI Returning JSON Data Differently Than Flask?

Incorrect Approach:

When serializing objects using json.dumps() before returning them in FastAPI, the JSON will be serialized twice. This double serialization results in the observed string output.

Solution 1: Simple Return for JSON Conversion

To correct this, simply return data as usual (e.g., dicts or lists). FastAPI will automatically convert it to JSON, ensuring that datetime objects are appropriately represented.

Example:

@app.get('/')
async def main():
    d = [
        {"User": "a", "date": date.today(), "count": 1},
        {"User": "b", "date": date.today(), "count": 2},
    ]
    return d

Output:

[
  {
    "User": "a",
    "date": "2023-01-09",
    "count": 1
  },
  {
    "User": "b",
    "date": "2023-01-09",
    "count": 2
  }
]

Solution 2: Custom Response for Explicit JSON Serialization

If necessary, you can serialize the object manually before returning it in a custom Response object. Set the media_type to 'application/json' and encode the serialized data yourself.

Example:

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')

Output:

[
  {
    "User": "a",
    "date": "2023-01-09",
    "count": 1
  },
  {
    "User": "b",
    "date": "2023-01-09",
    "count": 2
  }
]

The above is the detailed content of Why Does FastAPI Handle JSON Serialization Differently Than Flask?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn