如何在烧瓶中"jsonify"列表?

hll*_*lau 82 json flask

Flask当jsonifying列表时,目前会引发错误.

我知道可能有安全原因https://github.com/mitsuhiko/flask/issues/170,但我仍然希望有一种方法来返回如下的JSON列表:

[
    {'a': 1, 'b': 2},
    {'a': 5, 'b': 10}
]
Run Code Online (Sandbox Code Playgroud)

代替

{ 'results': [
    {'a': 1, 'b': 2},
    {'a': 5, 'b': 10}
]}
Run Code Online (Sandbox Code Playgroud)

响应application/json请求.如何使用Jsonify在Flask中返回JSON列表?

mia*_*nos 73

你不能但是你可以这样做.我需要这个用于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')
Run Code Online (Sandbox Code Playgroud)

  • +1为mimetype ='application/json',保存我寻找相关标题:) (5认同)
  • @CameronWhite - `flask.json`是`try:import simplejson as json的简写; 除了ImportError:import json` (3认同)

Fog*_*ird 54

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

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

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

  • @FogleBird有哪些安全原因? (19认同)
  • @Jocelyndelalande:http://flask.pocoo.org/docs/0.10/security/#json-security (7认同)
  • 安全性不再是一个有效的问题,因此Flask的`jsonify`现在支持转储列表:http://stackoverflow.com/a/35000418/770425 (4认同)
  • 这样做,我还需要手动设置标题的Content-Type? (3认同)
  • 是的,`application/json`. (3认同)

Geo*_*ath 15

这对我有用.你使用的是哪个版本的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)
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我正在使用Flask 0.9,但似乎这将输出散列json而不是列表json. (3认同)
  • 建议不要使用“list”作为变量的标识符 (3认同)

Jef*_*man 8

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


sto*_*ury 7

解决了,没有大惊小怪.你可以懒惰并使用jsonify,所有你需要做的就是传入items = [你的列表].

看看这里的解决方案

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


小智 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)
Run Code Online (Sandbox Code Playgroud)