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] だけを返したい