2017-08-10 5 views
0

これは私のコードです:parse_argsでJSON配列を解析する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 

私が投稿した場合、このようなJSONオブジェクト:

{ 
    "list" : ["ele1", "ele2", "ele3"] 
} 

parser.parse_args()はこのPythonのリストにそれを解析します

'list': ['e','l','e','1'] 

request.get_json()作品ですが、私は本当にreqparserの検証をしたいと思います... parser.parse_args()をJSON配列で正しく動作させるにはどうすればよいですか?思い付いた

答えて

0

ここでは、回避策aは

は('list': [1, 2, 3]私はこのエラーを取得する:TypeError("'int' object is not iterable",) is not JSON serializable、JSON配列は、整数が含まれている場合場合)。

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") 

これは機能しますが、私はフレークの中でこれを行う適切な方法があると思います。私は、それぞれのJSON配列に対してrequest.get_json()を呼び出すことは、特にリクエストデータがかなり大きい場合には、パフォーマンスの面で最善ではないことも想像します。