RESTful-Flask 使用 parse_args() 解析 JSON 数组

Jod*_*odo 3 python arrays json flask flask-restful

这是我的代码:

parser = reqparse.RequestParser(bundle_errors=True)    
parser.add_argument('list', type=list, location="json")

class Example(Resource):
    def post(self):
        #json_data = request.get_json(force=True)
        json_data = parser.parse_args()
        return json_data
Run Code Online (Sandbox Code Playgroud)

如果我发布这样的 JSON 对象:

{
  "list" : ["ele1", "ele2", "ele3"]
}
Run Code Online (Sandbox Code Playgroud)

parser.parse_args() 将其解析为这个 python 列表:

'list': ['e','l','e','1']
Run Code Online (Sandbox Code Playgroud)

request.get_json()有效,但我真的很想对 reqparser 进行验证...如何parser.parse_args()使用 JSON 数组正常工作?

(我得到这个错误:TypeError("'int' object is not iterable",) is not JSON serializable如果如果JSON数组包含整数:'list': [1, 2, 3]

tok*_*fsj 6

chuong nguyen 对你的问题的评论是正确的。举个例子:

def post(self):
    parser = reqparse.RequestParser()
    parser.add_argument('options', action='append')
    parser = parser.parse_args()
    options = parser['options']

    response = {'options': options}
    return jsonify(response)
Run Code Online (Sandbox Code Playgroud)

有了这个,如果你要求:

curl -H 'Content-type: application/json' -X POST -d '{"options": ["option_1", "option_2"]}' http://127.0.0.1:8080/my-endpoint
Run Code Online (Sandbox Code Playgroud)

回应将是:

{
    "options": [
      "option_1",
      "option_2"
    ]
}
Run Code Online (Sandbox Code Playgroud)