如何在 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.json
是 try: 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和json.dumps的区别