Maison > développement back-end > Tutoriel Python > Pourquoi FastAPI gère-t-il la sérialisation JSON différemment de Flask ?

Pourquoi FastAPI gère-t-il la sérialisation JSON différemment de Flask ?

DDD
Libérer: 2024-12-07 07:40:16
original
257 Les gens l'ont consulté

Why Does FastAPI Handle JSON Serialization Differently Than Flask?

Pourquoi FastAPI renvoie-t-il les données JSON différemment de Flask ?

Approche incorrecte :

Lors de la sérialisation d'objets à l'aide de json.dumps () avant de les renvoyer dans FastAPI, le JSON sera sérialisé deux fois. Cette double sérialisation entraîne la sortie de chaîne observée.

Solution 1 : retour simple pour la conversion JSON

Pour corriger cela, renvoyez simplement les données comme d'habitude (par exemple, des dictés ou des listes). FastAPI le convertira automatiquement en JSON, garantissant que les objets datetime sont représentés de manière appropriée.

Exemple :

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

Sortie :

[
  {
    "User": "a",
    "date": "2023-01-09",
    "count": 1
  },
  {
    "User": "b",
    "date": "2023-01-09",
    "count": 2
  }
]
Copier après la connexion
Copier après la connexion

Solution 2 : Réponse personnalisée pour la sérialisation JSON explicite

Si Si nécessaire, vous pouvez sérialiser l'objet manuellement avant de le renvoyer dans un objet Response personnalisé. Définissez le type de média sur « application/json » et encodez vous-même les données sérialisées.

Exemple :

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')
Copier après la connexion

Sortie :

[
  {
    "User": "a",
    "date": "2023-01-09",
    "count": 1
  },
  {
    "User": "b",
    "date": "2023-01-09",
    "count": 2
  }
]
Copier après la connexion
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal