在Flask API中展平数组

时间:2013-05-21 18:42:18

标签: python api post flask

我正在创建一个带有烧瓶的API,它将POST消息体作为嵌套数组,然后返回值列表。一个例子是卷曲...... -d“(([[1,[],[2,3]],[[4]],5])”将返回[1,2,3,4,5]。展平脚本在命令中起作用但是,当我发布到API时,我得到了一些奇怪的结果。代码在这里:

app = Flask(__name__)
app.config.from_object(__name__)
app.config.from_envvar('PHIGITAL_SETTINGS', silent=True)


@lru_cache(maxsize=500)
def flatten(l):
    flattened = []
    for el in l:
        if isinstance(el, (list, tuple)):
            flattened.extend(flatten(el))
        else:
            flattened.append(el)
    return flattened

@app.route('/flatten', methods=['POST'])
def flatten_api():
    if request.method == 'POST':
        try:
            return jsonify({"response" : flatten(request.data)})
        except Exception as e:
            return jsonify({"response" : "ERROR: %s" % str(e)})

if __name__ == '__main__':
    app.run()

在Postman中测试这个给我回复:{“response”:[“[”,“[”,“1”,“,”,“”,“[”,“]”,“,”,“ “,”[“,”2“,”,“,”“,”3“,”]“,”“”,“,”,“”,“[”,“[”,“4”,“] “,”]“,”,“,”“,”5“,”]“]}

这显然不正确。我认为这可能与request.data是一个字符串的事实有关,所以我尝试使用ast.literal_eval使request.data成为一个列表,但是当我得到错误“unhashable type:'list'”尝试在ast.literal_eval(request.data)上调用flatten。我完全被难过了,非常感谢任何帮助。

此外,Flask中是否可以只返回一个值,而不是键值对?我宁愿只返回[1,2,3,4,5]而不是{“回应”:[1,2,3,4,5]}

1 个答案:

答案 0 :(得分:1)

您需要使用Flask的反序列化数据。而不是request.data使用request.json

将您的代码更改为:

return jsonify({"response" : flatten(request.json)})