我正在使用烧瓶制作一个 API,它将 POST 消息正文作为嵌套数组,然后返回值列表。一个例子是 curl ...。-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] 而不是 {"response": [1,2,3,4,5]}