TypeError:**之后的jsonify()参数必须是映射,而不是使用Flask返回JSON的列表

时间:2015-09-02 22:20:50

标签: python json flask

我正在使用flask和gevent。我的功能如下:

@app.route('/index',methods=['POST'])
def index():
....
....
gevent.joinall(threads)
res = [t.value for t in threads]
return jsonify(**res)

生成的响应(res)是一个字典列表,如下所示:

[{u'token': u'146bf00b2cb96e6c425c2ab997637', u'a': u'aaa'},{u'token': u'146bf00b2cb96e6c425c2ab3f7417', u'a': u'bbb'}, {u'token': u'146bf00b2cb96e6c425c2ab3f5692', u'a': u'ccc'} ]

当我尝试jsonify时,我得到:

TypeError: jsonify() argument after ** must be a mapping, not list

我做错了什么?

1 个答案:

答案 0 :(得分:3)

(**res)期望res成为单个字典,它可以扩展为jsonify函数的关键字参数。例如

res = dict(a=1, b=2)
jsonify(**res)
# is the same as
jsonify(a=1, b=2)

在你的情况下,你不能只做:

jsonify(res)

编辑:实际上,我认为您需要将结果包装在dict中以返回它们。您可以使用jsonify将其缩短为:

jsonify(results=res)

给你

{
  "results": [
    {
      "a": "aaa",
      "token": "146bf00b2cb96e6c425c2ab997637"
    },
    {
      "a": "bbb",
      "token": "146bf00b2cb96e6c425c2ab3f7417"
    },
    {
      "a": "ccc",
      "token": "146bf00b2cb96e6c425c2ab3f5692"
    }
  ]
}