gpt4 book ai didi

python - Flask jsonify 返回奇怪的数组?

转载 作者:太空狗 更新时间:2023-10-30 02:03:57 29 4
gpt4 key购买 nike

我正在尝试使用 Flask 创建一个简单的 API。我现在想返回一个字典列表,如下所示:

print results  # prints out [{'date': '2014-09-25 19:00:00', 'title': u'Some Title'}]
response = make_response(jsonify(results))
response.headers['Content-Type'] = 'application/json'
return response

但是当我在浏览器中访问 url 时,我得到以下信息:

{
"date": "title"
}

有人知道我在这里做错了什么吗?欢迎所有提示!

最佳答案

这只是 Flask 版本 0.11 之前 的问题;如果您仍然遇到此问题,最好的办法是升级到更高版本,因为 0.10 现在已经很老了。


对于 0.10 版之前的 Flask,jsonify() 将只接受字典。如果你给它一个列表,它会把这个对象变成一个字典,带有 dict(argument)。查看Flask.jsonify() documentation :

Creates a Response with the JSON representation of the given arguments with an application/json mimetype. The arguments to this function are the same as to the dict constructor.

(强调我的)

在您的情况下,您有一个包含一个元素的列表,并且该元素在迭代时具有 2 个值。这两个值然后成为输出字典的键和值:

>>> results = [{'date': '2014-09-25 19:00:00', 'title': u'Some Title'}]
>>> dict(results)
{'date': 'title'}

那是因为 dict() 构造函数采用另一个字典、关键字参数 (key, value) 对的可迭代对象。

解决方案是不要传入列表,但至少要给它一个键:

response = jsonify(results=results)

jsonify() 已经返回了一个响应对象,没有必要再调用 make_response() 了。上面的代码生成了一个 JSON 对象,其中包含 'results' 键和您的列表作为值。

出于安全原因,

jsonify() 只接受字典。再次引用文档:

For security reasons only objects are supported toplevel. For more information about this, have a look at JSON Security.

如果你真的想绕过这个,你必须创建自己的响应:

from Flask import json

response = make_response(json.dumps(results), mimetype='application/json')

关于python - Flask jsonify 返回奇怪的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26143046/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com