一尘不染

以整洁的方式显示从Flask返回的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" }]

如何返回此字典,以便每个键和值都在各自的行上?


阅读 971

收藏
2020-04-06

共1个答案

一尘不染

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 flask.jsonify(**course_list)

这将返回args jsonify作为JSON表示形式,并且与你的代码不同,它将发送适当的Content-Type标头:application/json。注意文档对格式的看法:

如果将JSONIFY_PRETTYPRINT_REGULARconfig参数设置为True或Flask应用程序在调试模式下运行,则该函数的响应将很漂亮地打印出来。压缩(不太漂亮)格式当前表示分隔符后没有缩进和空格。

当不在调试模式下时,响应将接收非漂亮的JSON。这不应该成为问题,因为不需要对用于JavaScript的JSON进行格式化(这只是通过网络发送的额外数据),并且大多数工具格式都是自己接收JSON的。

如果你仍然想使用json.dumps(),可以通过返回Response with 来发送正确的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")
2020-04-06