这只是 0.11 之前的 Flask 版本 的问题;如果您仍然看到这个问题,最好的办法是升级到更高版本,因为 0.10 现在已经很古老了。
对于 0.10 及以下版本的 Flask,jsonify() 将仅接受 字典。如果你给它一个列表,它会将对象变成一个字典,带有dict(argument)。见Flask.jsonify() documentation:
使用application/json mimetype 的给定参数的 JSON 表示创建一个 Response。 此函数的参数与 dict 构造函数的参数相同。
(强调我的)
在您的情况下,您有一个包含一个元素的列表,并且该元素在迭代时具有 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()。上面生成了一个带有 'results' 键和您的列表作为值的 JSON 对象。
jsonify() 出于安全原因仅使用字典。再次引用文档:
出于安全原因,仅支持顶级对象。有关这方面的更多信息,请查看JSON Security。
如果你真的想绕过这个,你必须创建自己的响应:
from Flask import json
response = make_response(json.dumps(results), mimetype='application/json')