我有一个功能,分析一个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
当前回答
在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)
其他回答
在Flask 1.1中,如果你返回一个字典,它会自动转换成JSON。因此,如果make_summary()返回一个字典,则可以
from flask import Flask
app = Flask(__name__)
@app.route('/summary')
def summary():
d = make_summary()
return d
询问是否包含状态码的SO被关闭为此状态码的副本。因此,为了回答这个问题,您可以通过返回(dict, int)形式的元组来包含状态代码。dict被转换为JSON, int将是HTTP状态码。如果没有任何输入,Status默认为200。所以在上面的例子中,代码是200。在下面的示例中,它被更改为201。
from flask import Flask
app = Flask(__name__)
@app.route('/summary')
def summary():
d = make_summary()
return d, 201 # 200 is the default
您可以使用检查状态码
curl --request GET "http://127.0.0.1:5000/summary" -w "\ncode: %{http_code}\n\n"
在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)
我使用装饰器返回jsonfiy的结果。我认为当一个视图有多个返回时可读性更好。这不支持返回像content, status这样的元组,但我用app.errorhandler来处理返回错误状态。
import functools
from flask import jsonify
def return_json(f):
@functools.wraps(f)
def inner(**kwargs):
return jsonify(f(**kwargs))
return inner
@app.route('/test/<arg>')
@return_json
def test(arg):
if arg == 'list':
return [1, 2, 3]
elif arg == 'dict':
return {'a': 1, 'b': 2}
elif arg == 'bool':
return True
return 'none of them'
jsonify序列化传递给JSON的数据。如果你想自己序列化数据,可以像jsonify那样,用status=200和mimetype='application/json'构建响应。
from flask import json
@app.route('/summary')
def summary():
data = make_summary()
response = app.response_class(
response=json.dumps(data),
status=200,
mimetype='application/json'
)
return response
要序列化一个对象,使用flask模块中的jsonify来jsonify对象,默认情况下字典会被序列化。另外,如果你处理的是文件,你总是可以使用make_response。