我有一个功能,分析一个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
当前回答
要返回JSON响应并设置状态码,可以使用make_response:
from flask import jsonify, make_response
@app.route('/summary')
def summary():
d = make_summary()
return make_response(jsonify(d), 200)
灵感来自这个评论在Flask问题跟踪器。
其他回答
向flask传递关键字参数。jsonify,它们将作为JSON对象输出。
@app.route('/_get_current_user')
def get_current_user():
return jsonify(
username=g.user.username,
email=g.user.email,
id=g.user.id
)
{
"username": "admin",
"email": "admin@localhost",
"id": 42
}
如果你已经有了一个字典,你可以直接把它作为jsonify(d)传递。
在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)
如果是字典,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",
}