Как "jsonify" список в Flask?

В настоящее время Flask вызывает ошибку при jsonizing списке.

Я знаю, что могут быть причины безопасности https://github.com/mitsuhiko/flask/issues/170, но я все же хотел бы иметь способ вернуть список JSON следующим образом:

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

вместо

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

при ответе на запрос application/json. Как я могу вернуть список JSON в Flask с помощью Jsonify?

Ответ 2

Вы не можете, но можете сделать это в любом случае. Мне нужно это для 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')

Ответ 3

Это работает для меня. Какую версию Flask вы используете?

from flask jsonify

...

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

Ответ 4

Теперь метод Flask jsonify() сериализует массивы верхнего уровня с этот коммит, доступный в Flask 0.11 и далее.

Для удобства вы можете либо перейти в список Python: jsonify([1,2,3]) Или перейдите в серию args: jsonify(1,2,3)

Оба будут сериализованы в массив верхнего уровня JSON: [1,2,3]

Подробности здесь: http://flask.pocoo.org/docs/dev/api/#flask.json.jsonify

Ответ 5

Решено, нет суеты. Вы можете быть ленивым и использовать jsonify, все, что вам нужно сделать, это передать элементы = [ваш список].

Взгляните сюда на решение

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

Ответ 6

Список в колбе можно легко jsonify с помощью jsonify, например:

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(__name__ == '__main__'):
    app.run(debug = True)

Ответ 7

josonify works..but, если вы собираетесь просто передать массив без ключа "results", вы можете использовать библиотеку json из python. Для меня работает следующее преобразование.

 import json

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

Ответ 8

Если вы в буквальном смысле пытаетесь вернуть список JSON в колбе, и вы совершенно уверены, что ваша переменная является списком, тогда простой способ (где bin - список из 1 и 0 ):

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

Наконец, в вашем клиенте вы получите что-то вроде

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