Python 以整洁的方式显示从烧瓶返回的JSON

Python 以整洁的方式显示从烧瓶返回的JSON,python,json,flask,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

我正在使用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)
如何返回此词典,使每个键和值都位于各自的行中?

Flask提供了一种方便:

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)
有关差异的更多信息:



在Flask1.0之前,JSON处理有些不同
jsonify
将尝试检测一个请求是否是AJAX,如果不是,则返回漂亮的打印结果;这被删除,因为它不可靠
jsonify
只允许dict作为的顶级对象;这在现代浏览器中不再适用。

如果出于某种原因,您需要超越flask.jsonify(例如),您可以使用以下方法实现上述安全修复@phpmycoder:

from json import dumps
from flask import make_response

def jsonify(status=200, indent=4, sort_keys=True, **kwargs):
    response = make_response(dumps(dict(**kwargs), indent=indent, sort_keys=sort_keys))
    response.headers['Content-Type'] = 'application/json; charset=utf-8'
    response.headers['mimetype'] = 'application/json'
    response.status_code = status
    return response

@app.route('/<major>/')
def major_res(major):
    course = client.db.course_col.find({"major": (major.encode("utf8", "ignore").upper())})
    return jsonify(**course)

@app.route('/test/')
def test():
    return jsonify(indent=2, sort_keys=False, result="This is just a test")

因为只返回一个课程,所以不需要列表。如果您有另一条路线返回多个课程,您可以这样做:
courses=query.that.returns.list
return jsonify(courses=courses)
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")
from json import dumps
from flask import make_response

def jsonify(status=200, indent=4, sort_keys=True, **kwargs):
    response = make_response(dumps(dict(**kwargs), indent=indent, sort_keys=sort_keys))
    response.headers['Content-Type'] = 'application/json; charset=utf-8'
    response.headers['mimetype'] = 'application/json'
    response.status_code = status
    return response

@app.route('/<major>/')
def major_res(major):
    course = client.db.course_col.find({"major": (major.encode("utf8", "ignore").upper())})
    return jsonify(**course)

@app.route('/test/')
def test():
    return jsonify(indent=2, sort_keys=False, result="This is just a test")
{
    "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"
}