Maison >développement back-end >Tutoriel Python >Comment puis-je éviter la double sérialisation lors du renvoi de données JSON dans FastAPI ?

Comment puis-je éviter la double sérialisation lors du renvoi de données JSON dans FastAPI ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-28 07:50:12782parcourir

How Can I Avoid Double Serialization When Returning JSON Data in FastAPI?

Comment les données JSON sont gérées par FastAPI

Le piège de la double sérialisation

Lors du renvoi de données JSON dans FastAPI à l'aide de json.dumps(), évitez double sérialisation. FastAPI effectue une sérialisation automatique en coulisse, donc l'appel manuel de json.dumps() peut conduire à une sortie tronquée, visible sous forme de chaîne au lieu de JSON.

Options de renvoi des données JSON

Option 1 : sérialisation automatique

Renvoyez simplement les données sous forme de dictionnaires, de listes, etc. FastAPI les convertira automatiquement en Format compatible JSON en utilisant son jsonable_encoder intégré et enveloppez-le dans un JSONResponse. Cette approche garantit une sérialisation appropriée et la prise en charge de la sérialisation d'objets non sérialisables tels que les dates et heures.

from datetime import date

data = [{"User": "a", "date": date.today(), "count": 1}]

@app.get('/')
async def main():
    return data

Option 2 : sérialisation personnalisée

Dans des scénarios spécifiques, la sérialisation manuelle peut être nécessaire. Dans ce cas, envisagez de renvoyer un objet Response personnalisé avec le type de média défini sur application/json.

import json

@app.get('/')
async def main():
    json_str = json.dumps(data, indent=4, default=str)
    return Response(content=json_str, media_type='application/json')

Considérations supplémentaires

  • Personnalisation du code d'état : Utilisez l'attribut Response.status_code pour définir un code d'état personnalisé pour les réponses JSON.
  • JSON alternatif Encodeurs : Pensez à utiliser des encodeurs JSON tiers plus rapides comme Orjson pour améliorer les performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn