RESTful-Flask 解析 JSON 数组 parse_args()
RESTful-Flask parsing JSON Arrays with parse_args()
这是我的代码:
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
如果我 post 一个像这样的 JSON 对象:
{
"list" : ["ele1", "ele2", "ele3"]
}
parser.parse_args()
将其解析为这个 python 列表:
'list': ['e','l','e','1']
request.get_json()
有效,但我真的很想验证 reqparser ...
如何让 parser.parse_args()
与 JSON 数组一起正常工作?
(我收到此错误:TypeError("'int' object is not iterable",) is not JSON serializable
,如果 JSON 数组包含整数:'list': [1, 2, 3]
)
这是我想出的解决方法。但这对我来说真的像是一个大 hack...
通过扩展输入类型,您可以像这样创建自己的 "array type":
from flask import request
def arrayType(value, name):
full_json_data = request.get_json()
my_list = full_json_data[name]
if(not isinstance(my_list, (list))):
raise ValueError("The parameter " + name + " is not a valid array")
return my_list
然后将其与解析器一起使用:
parser = reqparse.RequestParser(bundle_errors=True)
parser.add_argument('list', type=arrayType, location="json")
它有效,但我认为在 flaks-restful 中应该有一个正确的方法来做到这一点。我想为每个 JSON 数组调用 request.get_json()
在性能方面也不是最好的,尤其是在请求数据相当大的情况下。
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)
有了这个,如果你要求:
curl -H 'Content-type: application/json' -X POST -d '{"options": ["option_1", "option_2"]}' http://127.0.0.1:8080/my-endpoint
响应将是:
{
"options": [
"option_1",
"option_2"
]
}
这是我的代码:
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
如果我 post 一个像这样的 JSON 对象:
{
"list" : ["ele1", "ele2", "ele3"]
}
parser.parse_args()
将其解析为这个 python 列表:
'list': ['e','l','e','1']
request.get_json()
有效,但我真的很想验证 reqparser ...
如何让 parser.parse_args()
与 JSON 数组一起正常工作?
(我收到此错误:TypeError("'int' object is not iterable",) is not JSON serializable
,如果 JSON 数组包含整数:'list': [1, 2, 3]
)
这是我想出的解决方法。但这对我来说真的像是一个大 hack...
通过扩展输入类型,您可以像这样创建自己的 "array type":
from flask import request
def arrayType(value, name):
full_json_data = request.get_json()
my_list = full_json_data[name]
if(not isinstance(my_list, (list))):
raise ValueError("The parameter " + name + " is not a valid array")
return my_list
然后将其与解析器一起使用:
parser = reqparse.RequestParser(bundle_errors=True)
parser.add_argument('list', type=arrayType, location="json")
它有效,但我认为在 flaks-restful 中应该有一个正确的方法来做到这一点。我想为每个 JSON 数组调用 request.get_json()
在性能方面也不是最好的,尤其是在请求数据相当大的情况下。
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)
有了这个,如果你要求:
curl -H 'Content-type: application/json' -X POST -d '{"options": ["option_1", "option_2"]}' http://127.0.0.1:8080/my-endpoint
响应将是:
{
"options": [
"option_1",
"option_2"
]
}