【问题标题】:How to correctly use Flask's jsonify() to return json?如何正确使用 Flask 的 jsonify() 返回 json?
【发布时间】:2016-04-06 20:32:54
【问题描述】:

我在使用 flask.jsonify 函数从字典输入输出格式化的 json 响应时遇到了一点麻烦,如 here. 中所述

我的代码似乎返回的是 Response 对象,而不是我想要的格式化 json 对象。

我有

@app.route('/rparser', methods=['GET', 'POST'])
def rparser():
    form = ParserForm(request.form)
    if request.method=='POST':
        result = jsonify(**dict)
        return render_template('rparser.html', form=form, result=result)
    else:
        return render_template('rparser.html', form=form)

其中 dict 是调用函数返回的字典对象。

在我的模板中,我有:

(form up here)

{% if result %}
    {{ result }}
{% endif %}

这是显示:

响应 135 字节 [200 OK]

如何让它返回我正在寻找的 json 表示?

【问题讨论】:

  • json.dumps 有什么问题?
  • @cricket_007 我希望显示漂亮打印的 json,而 json.dumps 不这样做
  • 这里的dict 是什么? JSON 数据应该来自哪里?
  • 根据flask api,jsonify 确实返回一个响应对象,即您所看到的字符串。如果 JSON 是您想要查看的全部内容,您可以使用 return jsonify(...)
  • @DanielRoseman dict 是通过调用另一个函数编译的 OrderedDict,该函数从同一页面上的表单中获取参数。这是字典的示例: OrderedDict([('name', 'Example'), ('reference_ranges', [OrderedDict([('descriptions', ['Follicular']), ('ranges', [OrderedDict( [('min', 22.0), ('max', 85.0), ('units', 'ng/dL')]), OrderedDict([('tag', 'SI'), ('min', 0.7 ), ('max', 2.5), ('units', 'mmol/L')])])])])])

标签: python json flask


【解决方案1】:

你可以像这样使用 json.dumps:

@app.route('/')
def home():
return render_template(
    'index.html',
    title='Home Page',
    result=json.dumps({"a":[{"o":1},{"o":2}]}, sort_keys = False, indent = 2)
)

然后像这样在模板中格式化它:

{% if result %}
   <pre>{{ result }}</pre>
{% endif %}

如果这符合您的期望。我认为 jsonify 用于提供 http.response 数据,而不是模板的上下文数据。

在这里查看 jsonify:https://stackoverflow.com/a/13172658/1307985

【讨论】:

  • 目标是让 json 打印出来。使用 json.dumps 我该怎么做?
  • 我已经更新了我的答案。这应该会在模板中为您提供某种漂亮的打印 json,但当然不是彩色的。您可以更改缩进以获得更多或更少的缩进。
  • 为了让它着色,有许多 JavaScript 库会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 2017-03-13
  • 1970-01-01
  • 2014-11-26
  • 2019-12-30
  • 2016-01-29
  • 1970-01-01
  • 2019-05-16
相关资源
最近更新 更多