POSTメッセージ本文としてネストされた配列を受け取り、値のリストを返すフラスコを使用してAPIを作成しています。例はcurl …. –d ”(([[1, [], [2, 3]], [[4]], 5])” は [1,2,3,4,5] を返します。平坦化スクリプトはコマンドで機能しますしかし、API に POST すると、奇妙な結果が得られます。コードは次のとおりです。
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 でキーと値のペアではなく、値だけを返すことは可能ですか? {"response": [1,2,3,4,5]} ではなく [1,2,3,4,5] だけを返したい