Je ne suis pas sûr de comprendre le but de la méthode flask.jsonify
. J'essaie de faire une chaîne JSON à partir de ceci:
data = {"id": str(album.id), "title": album.title}
mais ce que je reçois avec json.dumps
diffère de ce que je reçois avec flask.jsonify
.
json.dumps(data): [{"id": "4ea856fd6506ae0db42702dd", "title": "Business"}]
flask.jsonify(data): {"id":…, "title":…}
Il est évident que je dois obtenir un résultat qui ressemble davantage à ce que json.dumps
renvoie. Qu'est-ce que je fais mal?
La fonction jsonify()
dans flask renvoie un objet flask.Response()
qui possède déjà l'en-tête de type de contenu approprié 'application/json' à utiliser avec les réponses json. Tandis que la méthode json.dumps()
renverra simplement une chaîne codée, ce qui nécessiterait l'ajout manuel de l'en-tête de type MIME.
En savoir plus sur la fonction jsonify()
ici pour une référence complète.
Edit: De plus, j'ai remarqué que jsonify()
gère les kwargs ou les dictionnaires, tandis que json.dumps()
prend également en charge les listes et autres.
Tu peux faire:
flask.jsonify(**data)
ou
flask.jsonify(id=str(album.id), title=album.title)
C'est flask.jsonify()
def jsonify(*args, **kwargs):
if __debug__:
_assert_have_json()
return current_app.response_class(json.dumps(dict(*args, **kwargs),
indent=None if request.is_xhr else 2), mimetype='application/json')
Le module json
utilisé est soit simplejson
, soit json
dans cet ordre. current_app
est une référence à l'objet Flask()
, c'est-à-dire votre application. response_class()
est une référence à la classe Response()
.
Le choix de l'un ou de l'autre dépend de ce que vous avez l'intention de faire. D'après ce que j'ai compris:
jsonify serait utile lorsque vous construisez une API que quelqu'un interroge et attend JSON en retour. E.g: l’API REST github peut utiliser cette méthode pour répondre à votre demande.
dumps, est plus sur la formulation d'objet data/python en json et le travail à l'intérieur de votre application. Par exemple, je dois passer un objet à ma couche de représentation où du javascript affichera un graphique. Vous alimenterez javascript avec le Json généré par les sauvegardes.