Python 在Flask API中展平阵列

Python 在Flask API中展平阵列,python,api,post,flask,Python,Api,Post,Flask,我正在使用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)

我正在使用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()
在《邮递员》中测试这一点会得到响应:{“响应”:[“[”、“[”、“1”、“1”、“1”、“4”、“4”、“5”、“5”、“3”、“3”、“3”、“3”、“3”、“5”、“5”、“4”、“5”、“5”、“4”、“5”、“5”、“5”}

这显然是不正确的。我认为这可能与request.data是字符串这一事实有关,所以我尝试使用ast.literal_eval将request.data设置为列表,但当我尝试调用ast.literal_eval(request.data)上的flatte时,出现了错误“unhabable type:'list'”.我完全被难住了,任何帮助都将不胜感激


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

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

将代码更改为:

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

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

将代码更改为:

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

出于安全原因,
jsonify
不支持顶级数组。出于好奇,为什么需要API终结点?出于安全原因,
jsonify
不支持顶级数组。出于好奇,为什么需要API终结点?那么您很可能忘记了
-H内容类型:ap将application/json
选项添加到curl命令中。Flask使用内容类型来确定如何处理输入。我对您的代码进行了如下测试:
curl-d'[1222[2223321]]'-H内容类型:application/jsonhttp://localhost:5000/flatten
那么您很可能忘记了curl命令的
-H Content-Type:application/json
选项。Flask使用Content-Type来确定如何处理输入。我对您的代码进行了如下测试:
curl-d'[1222,[22233321]]'-H内容类型:application/jsonhttp://localhost:5000/flatten