Maison >développement back-end >Tutoriel Python >Comment puis-je renvoyer efficacement des données au format JSON dans une application FastAPI ?

Comment puis-je renvoyer efficacement des données au format JSON dans une application FastAPI ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-28 22:22:11723parcourir

How Can I Efficiently Return JSON-Formatted Data in a FastAPI Application?

Renvoi de données au format JSON avec FastAPI

Lors du développement d'une application FastAPI, il est essentiel de comprendre les nuances du renvoi de données au format JSON. Cela nécessite de se plonger dans le fonctionnement interne de FastAPI et de comprendre le rôle joué par la sérialisation JSON.

Le dilemme de la sérialisation JSON

Au cœur du problème se trouve l'utilisation de json.dumps() pour sérialiser les objets avant de les renvoyer. Bien que cette approche puisse sembler logique, elle introduit une sérialisation redondante puisque FastAPI code automatiquement en JSON la valeur de retour lors de la génération de la réponse. Cela conduit à une représentation sous forme de chaîne apparemment incorrecte des données JSON plutôt qu'à un dict soigneusement formaté.

La solution

Pour remédier à cela, vous devez autoriser FastAPI à gérer le processus de sérialisation JSON. Ceci peut être réalisé en renvoyant directement des objets de données (dictés, listes, etc.). FastAPI les convertira de manière transparente en données compatibles JSON à l'aide de jsonable_encoder et les enveloppera dans une JSONResponse. La réponse résultante contiendra des données codées application/json, garantissant le format JSON souhaité.

Options de mise en œuvre

Option 1 : Utiliser les valeurs de retour

Renvoyer les objets de données comme prévu :

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

En coulisses, FastAPI sérialisera le dict (d) à l'aide de JSONResponse et encodez-le avec json.dumps().

Option 2 : Objets de réponse personnalisés

Si vous avez besoin d'un contrôle précis sur la réponse, utilisez directement l'objet Response :

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

Cette approche vous accorde la liberté sur le type de média (par exemple, « application/json »), fournissant personnalisation.

Remarque : L'argument par défaut de json.dumps() (str) permet la sérialisation des objets datetime. En passant un retrait, vous pouvez contrôler le formatage de la sortie JSON.

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