我正在使用 Flask 创建一个 API 并具有以下代码:
@app.route('/<major>/')
def major_res(major):
course_list = list(client.db.course_col.find({"major": (major.encode("utf8", "ignore").upper())}))
return json.dumps(course_list, sort_keys=True, indent=4, default=json_util.default)
在浏览器中查看/csci/
时,输出如下:
[{ "course": "CSCI052", "description": "Fundamentals of Computer Science. A solid foundation in functional programming, procedural and data abstraction, recursion and problem-solving. Applications to key areas of computer science, including algorithms and complexity, computer architecture and organization, programming languages, finite automata and computability. This course serves the same role as HM 60 as a prerequisite for upper-division computer science courses at any of the Claremont Colleges. Prerequisite: 51.", "instructor": "Bull, Everett L.,, Jr.", "name": " Fundamentals of Computer Science", "number": 52, "school": "PO" }]
我如何返回这个字典,以便每个键和值都在自己的行上?
最佳答案
Flask 提供 jsonify()
为方便起见:
from flask import jsonify
@app.route("/<major>/")
def major_res(major):
course_list = list(client.db.course_col.find({"major": major.upper()}))
return jsonify(**course_list)
这会将 jsonify
的参数作为 JSON 表示形式返回,并且与您的代码不同,它将发送正确的 Content-Type
header :application/json
。请注意文档对格式的看法:
This function's response will be pretty printed if the
JSONIFY_PRETTYPRINT_REGULAR
config parameter is set toTrue
or the Flask app is running in debug mode. Compressed (not pretty) formatting currently means no indents and no spaces after separators.
当不处于 Debug模式时,响应将接收非 pretty-print 的 JSON。这应该不是问题,因为用于 JavaScript 消费的 JSON 不需要格式化(这只是通过网络发送的额外数据),并且大多数工具格式化自己接收的 JSON。
如果您仍想使用 json.dumps()
,您可以通过返回 Response
来发送正确的 mimetype。使用 current_app.response_class()
。
from flask import json, current_app
@app.route("/<major>/")
def major_res(major):
course_list = list(client.db.course_col.find({"major": major.upper() }))
return current_app.response_class(json.dumps(course_list), mimetype="application/json")
有关差异的更多信息:
在 Flask 1.0 之前,JSON 处理有些不同。 jsonify
将尝试检测请求是否为 AJAX,如果不是则返回 pretty-print ;这被删除了,因为它不可靠。 jsonify
只允许字典作为 security reasons 的顶级对象;这不再适用于现代浏览器。
关于python - 以简洁的方式显示从 Flask 返回的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16908943/