100

目前Flask在对列表进行 jsonifying 时会引发错误。

我知道可能存在安全原因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请求时。如何使用 Jsonify 在 Flask 中返回 JSON 列表?

4

8 回答 8

87

你不能,但无论如何你都可以这样做。我需要这个用于 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')
于 2012-10-06T10:24:14.127 回答
64

jsonify出于安全原因,阻止您在 Flask 0.10 及更低版本中执行此操作。

无论如何,只需json.dumps在 Python 标准库中使用即可。

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

于 2012-09-16T01:15:32.970 回答
20

这对我有用。您使用的是哪个版本的 Flask?

from flask import jsonify

...

@app.route('/test/json')
def test_json():
    list = [
            {'a': 1, 'b': 2},
            {'a': 5, 'b': 10}
           ]
    return jsonify(results = list)
于 2012-09-15T08:29:58.117 回答
12

Flask 的方法现在序列化了截至本次提交jsonify()的顶级数组,可在 Flask 0.11 及更高版本中使用。

为方便起见,您可以传入 Python 列表:jsonify([1,2,3]) 或传入一系列argsjsonify(1,2,3)

两者都将被序列化为 JSON 顶级数组:[1,2,3]

详细信息:http: //flask.pocoo.org/docs/dev/api/#flask.json.jsonify

于 2016-01-25T19:09:46.100 回答
7

解决了,不费吹灰之力。你可以偷懒用jsonify,只需要传入items=[your list]。

在这里查看解决方案

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

于 2014-10-31T17:17:02.337 回答
5

使用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)
于 2016-03-12T14:15:39.877 回答
1

如果您从字面上搜索在烧瓶中返回JSON 列表的方式,并且您完全确定您的变量是一个列表,那么简单的方法是(其中bin是 1 和 0 的列表):

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

最后,在您的客户端中,您将获得类似

{ “答案”: [ 0.0, 0.0, 1.0, 1.0, 0.0 ] }

于 2017-07-06T06:04:21.310 回答
0

josonify 工作..但如果你打算只传递一个没有“结果”键的数组,你可以使用 python 中的 json 库。以下转换对我有用..

 import json

 @app.route('/test/json')
 def test_json():
 list = [
        {'a': 1, 'b': 2},
        {'a': 5, 'b': 10}
       ]
 return json.dumps(list))
于 2014-01-07T14:42:15.330 回答