我正在创建一个带有烧瓶的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]}
答案 0 :(得分:1)
您需要使用Flask的反序列化数据。而不是request.data
使用request.json
将您的代码更改为:
return jsonify({"response" : flatten(request.json)})