python - 以简洁的方式显示从 Flask 返回的 JSON

标签 python json flask

我正在使用 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 to True 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/

相关文章:

python - Heroku 中的 Dyno 计数

javascript - 变量递增不正确

没有结构的json解码

javascript - 选择自动完成选项后如何更新另一个输入字段?

python - python中的线程编程

python - Flask-Security user_registered 信号在 Python 3.3 中未收到,但在 2.7 中有效

python - IO 错误 - Flask-mail 和带有代理的运行服务器

python - 将日期和时间转换为时间戳

python - Django ModelForm 元数据

python - 我怎么知道哪个基类将特定属性添加到子类对象