2017-08-10 26 views
0

這是我的代碼:REST風格瓶解析JSON陣列,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 

如果我發佈一個JSON對象是這樣的:

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

parser.parse_args()它解析到這條巨蟒列表:

'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]

回答

0

這裏是一個解決辦法一個想出了。但它確實看起來像一個大劈到我...

通過擴展輸入類型,你可以像創建自己的「數組類型」:

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()在性能方面也不是最好的,尤其是在請求數據相當大的情況下。