Home >Backend Development >Python Tutorial >Why Does FastAPI Handle JSON Serialization 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.
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 } ]
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!