Python - HTTP POST 'Response' 对象不可订阅

Python - HTTP POST 'Response' object is not subscript-able

我在 Python3 中有以下代码接收 POST 请求。稍后显示的示例请求。

我看到 POST 请求正常。来自 POST 的 JSON 数据有 2 个键 - "id""ingredients"。但是当我尝试基于密钥访问数据时,例如如下所示的内容["id"],它显示错误

TypeError: 'Response' object is not subscriptable

代码:

@app.route('/cuisine/api/json',methods=['POST'])
def getCuisine():
    content = jsonify(request.json)
    return content["id"]

卷曲示例

curl --header "Content-Type: application/json"   --request POST   --data '{"id": 10259,"ingredients": ["romaine lettuce","black olives","grape tomatoes","garlic","pepper","purple onion","seasoning","garbanzo beans","feta cheese crumbles"]}'   http://127.0.0.1:5000/cuisine/api/json

我想我正确地遵循了 但没有用。我错过了什么?

编辑

完整的错误回溯

Traceback (most recent call last):
  File "/Users/MacUser/anaconda3/lib/python3.6/site-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/MacUser/anaconda3/lib/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/Users/MacUser/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/MacUser/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Users/MacUser/anaconda3/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/MacUser/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/MacUser/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/MacUser/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Users/MacUser/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/MacUser/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/MacUser/Desktop/cuisine-prediction/webservice.py", line 62, in getCuisine
    return content["id"]
TypeError: 'Response' object is not subscriptable

您不能在 request.json 上调用 jsonify,然后将该对象用作字典。调用 request.json 将尝试 return 来自 JSON.

的字典

所以你的后退步骤如下:

return jsonify(request.json.get(‘id’))

但问题的真正原因是 jsonify 创建了一个 HTTP 响应对象,它不是您认为的简单字典。

jsonify 将 Python 对象转换为具有 JSON 负载的 Flask 响应。因此,您从请求中获取已解析的数据(这是一个 Python 字典)并将其转换回 JSON。您应该直接使用 request.json 来获取数据。

@app.route('/cuisine/api/json',methods=['POST'])
def getCuisine():
    return jsonify(request.json["id"])