Flask 中的 jsonify 和 tojson 有什么区别?

What is the difference between jsonify and tojson in Flask?

我想在模板的 JavaScript 块中使用 Flask 视图中的一些数据。我尝试使用 jsonifytojson,但出现错误。两者有什么区别?如何在模板中将 JSON 传递给 JavaScript?

@app.route('/stocks')
def stocks():
    stocks = jsonify({"aapl":{"price":700, "volume":5000000}, "goog":{"price":655, "volume":9750000}})
    return render_template("stocks.html", stocks=stocks)
<script>var zipcodes = {{ stocks|tojson }};</script>
TypeError: <Response 21 bytes [200 OK]> is not JSON serializable

jsonify returns 一个 Response 对象从 Flask 视图 returned 作为对客户端的 JSON 响应,所以在这种情况下 stocks 不是 JSON 对象而是 Response 对象。

如果你想使用JSON而不是直接return它给客户端使用,你可以使用tojson过滤器将对象转换为JSON在模板中。

当您需要在模板中使用 JSON 时,例如在 JavaScript 变量中使用它,您应该使用 tojson。当您需要 return 对客户端的 JSON 响应时,您应该使用 jsonify.