我有一个功能,分析一个CSV文件与熊猫和产生一个词典的摘要信息。我想从Flask视图返回结果作为响应。如何返回JSON响应?
@app.route("/summary")
def summary():
d = make_summary()
# send it back as json
我有一个功能,分析一个CSV文件与熊猫和产生一个词典的摘要信息。我想从Flask视图返回结果作为响应。如何返回JSON响应?
@app.route("/summary")
def summary():
d = make_summary()
# send it back as json
当前回答
视图可以直接返回Python字典或列表,Flask会自动调用jsonify。
@app.route("/summary")
def summary():
d = make_summary()
return d
对于较旧的Flask版本,或者要返回不同的json序列化对象,请导入并使用jsonify。
from flask import jsonify
@app.route("/summary")
def summary():
d = make_summary()
return jsonify(d)
其他回答
在Flask 0.11之前,jsonfy不允许直接返回数组。相反,将列表作为关键字参数传递。
@app.route('/get_records')
def get_records():
results = [
{
"rec_create_date": "12 Jun 2016",
"rec_dietary_info": "nothing",
"rec_dob": "01 Apr 1988",
"rec_first_name": "New",
"rec_last_name": "Guy",
},
{
"rec_create_date": "1 Apr 2016",
"rec_dietary_info": "Nut allergy",
"rec_dob": "01 Feb 1988",
"rec_first_name": "Old",
"rec_last_name": "Guy",
},
]
return jsonify(results=list)
如果出于某种原因不想使用jsonify,可以手动完成它的工作。调用flask.json.dumps创建JSON数据,然后返回带有application/ JSON内容类型的响应。
from flask import json
@app.route('/summary')
def summary():
data = make_summary()
response = app.response_class(
response=json.dumps(data),
mimetype='application/json'
)
return response
瓶。Json不同于内置的Json模块。如果可用,它将使用更快的simplejson模块,并支持与Flask应用程序的各种集成。
如果是字典,flask可以直接返回(版本1.0.2)
def summary():
d = make_summary()
return d, 200
从Flask 1.1.0版本开始,如果视图返回dict,它将被转换为JSON响应。
@app.route("/users", methods=['GET'])
def get_user():
return {
"user": "John Doe",
}
要返回JSON响应并设置状态码,可以使用make_response:
from flask import jsonify, make_response
@app.route('/summary')
def summary():
d = make_summary()
return make_response(jsonify(d), 200)
灵感来自这个评论在Flask问题跟踪器。