如何在 Flask 中“jsonify”一个列表? [复制]

Posted

技术标签:

【中文标题】如何在 Flask 中“jsonify”一个列表? [复制]【英文标题】:How do I `jsonify` a list in Flask? [duplicate] 【发布时间】:2012-09-08 06:07:03 【问题描述】:

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

我知道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 列表?

【问题讨论】:

这不再是一个安全问题,但始终返回一个字典仍然被认为是最佳实践:softwareengineering.stackexchange.com/a/304638/369319 【参考方案1】:

这对我有用。您使用的是哪个版本的 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)

【讨论】:

好吧,我使用的是 Flask 0.9,但似乎这会输出一个哈希 json 而不是列表 json。 不建议使用list作为变量标识符【参考方案2】:

jsonify 阻止您在 Flask 0.10 和更低版本的 for security reasons 中执行此操作。

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

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

【讨论】:

这样做,我还需要手动设置 header 的 Content-Type 吗? 是的,application/json @FogleBird 哪个安全原因? @Jocelyndelalande:flask.pocoo.org/docs/0.10/security/#json-security 安全不再是一个有效的问题,因此 Flask 的 jsonify 现在支持转储列表:***.com/a/35000418/770425【参考方案3】:

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

   return jsonify('ans':bin), 201

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

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

【讨论】:

【参考方案4】:

Flask 的 jsonify() 方法现在可序列化***数组 this commit,在 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 可以轻松地对烧瓶中的列表进行 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)

【讨论】:

jsonify('tasks': tasks) 工作完美,这无疑为我节省了很多时间【参考方案6】:

你不能,但无论如何你都可以这样做。我需要这个用于 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')

【讨论】:

还有flask.json.dumps不知道是不是比json.dumps好 @CameronWhite - flask.jsontry: import simplejson as json; except ImportError: import json 的简写 +1 for mimetype='application/json',帮我寻找相关的标题 :) 有趣的是我在完全相同的情况下被困在这个问题上(jQuery 文件上传),你的代码也以另一种方式帮助了我。 我最喜欢这个答案。根据我的经验,Response() 以比 make_response() 更简单的方式公开 mimetype,并且仅执行 return json.dumps() 不会设置任何标题。【参考方案7】:

已解决,不用大惊小怪。你可以偷懒用jsonify,只需要传入items=[your list]。

在这里查看解决方案

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

【讨论】:

【参考方案8】:

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))

【讨论】:

以上是关于如何在 Flask 中“jsonify”一个列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

jsonify Flask中的SQLAlchemy结果集[重复]

Flask 中字典数据返回(jsonify)

在flask中使用jsonify和json.dumps的区别

为啥flask的jsonify方法很慢?

Flask 学习-88. jsonify() 函数源码解读深入学习

将用户构建的 json 编码器传递到 Flask 的 jsonify