web-dev-qa-db-fra.com

Comment puis-je `jsonifier` une liste dans Flask?

Actuellement, Flask génère une erreur lors de la jsonification d'une liste.

Je sais qu'il peut y avoir des raisons de sécurité https://github.com/mitsuhiko/flask/issues/17 , mais j'aimerais quand même avoir un moyen de retourner une liste JSON comme celle-ci:

[
    {'a': 1, 'b': 2},
    {'a': 5, 'b': 10}
]

au lieu de

{ 'results': [
    {'a': 1, 'b': 2},
    {'a': 5, 'b': 10}
]}

en répondant à un application/json demande. Comment puis-je retourner une liste JSON dans Flask en utilisant Jsonify?

81
hllau

jsonify vous empêche de le faire dans Flask 0.10 et inférieur pour des raisons de sécurité .

Pour le faire quand même, utilisez simplement json.dumps dans la bibliothèque standard Python).

http://docs.python.org/library/json.html#json.dumps

54
FogleBird

Vous ne pouvez pas mais vous pouvez le faire quand même comme ça. J'avais besoin de cela pour jQuery-File-Upload

import json
# get this object
from flask import Response

#example data:

    js = [ { "name" : filename, "size" : st.st_size , 
        "url" : url_for('show', filename=filename)} ]
#then do this
    return Response(json.dumps(js),  mimetype='application/json')
73
mianos

Cela fonctionne pour moi. Quelle version de Flask utilisez-vous?

from flask import jsonify

...

@app.route('/test/json')
def test_json():
    list = [
            {'a': 1, 'b': 2},
            {'a': 5, 'b': 10}
           ]
    return jsonify(results = list)
14
Geordee Naliyath

La méthode jsonify() de Flask sérialise maintenant les tableaux de niveau supérieur à partir de this commit , disponible à partir de Flask 0.11 et ultérieur.

Pour plus de commodité, vous pouvez soit passer une liste Python: jsonify([1,2,3])], soit une série de args: jsonify(1,2,3)

Les deux seront sérialisés dans un tableau de niveau supérieur JSON: [1,2,3]

Détails ici: http://flask.pocoo.org/docs/dev/api/#flask.json.jsonify

8
Jeff Widman

Résolu, pas de chichi. Vous pouvez être fainéant et utiliser jsonify, tout ce que vous avez à faire est de transmettre items = [votre liste].

Jetez un coup d'oeil ici pour la solution

https://github.com/mitsuhiko/flask/issues/51

7
stonefury

Une liste dans un flask peut être facilement jsonify en utilisant jsonify comme:

from flask import Flask,jsonify
app = Flask(__name__)

tasks = [
    {
        'id':1,
        'task':'this is first task'
    },
    {
        'id':2,
        'task':'this is another task'
    }
]

@app.route('/app-name/api/v0.1/tasks',methods=['GET'])
def get_tasks():
    return jsonify({'tasks':tasks})  #will return the json

if(__== '__main__'):
    app.run(debug = True)
5
Hiro

Si vous recherchez littéralement le moyen de renvoyer un liste JSON dans flask et que vous êtes parfaitement sûr que votre variable est une liste, le moyen le plus simple est (where bin est une liste de 1 et de 0):

   return jsonify({'ans':bin}), 201

Enfin, chez votre client, vous obtiendrez quelque chose comme:

{"ans": [0.0, 0.0, 1.0, 1.0, 0.0]}

1
Yor Jaggy Castaño

josonify fonctionne ... mais si vous souhaitez simplement passer un tableau sans la clé "results", vous pouvez utiliser la bibliothèque json de python. La conversion suivante fonctionne pour moi ..

 import json

 @app.route('/test/json')
 def test_json():
 list = [
        {'a': 1, 'b': 2},
        {'a': 5, 'b': 10}
       ]
 return json.dumps(list))
0
Madhan Ganesh