2015-12-02 86 views
0

我的數據的API調用 - :我送JSON數據API,但得到的unicode JSON數據磨片從Android設備

{"op":"merge","merge_bcards_ids":{"data":[216,217]},"target_bacard_id":226} 

鑑於文件我得到的JSON列表數據request.data [ 「merge_bcards_ids」]: -

[258, 259] <type 'list'> which is showing correct. 

但是,當從外部設備則此API調用: -

[257,258] <type 'unicode'> 

所以我想列表,而不是統一。請幫助我。

我的觀點是: -

class BusinessViewSet(viewsets.ModelViewSet): 
    queryset = BusinessCard.objects.all() 
    serializer_class = BusinessCardSerializer 

    def create(self, request): 
     try: 
      op = request.data["op"] 
     except:    
      op = None 

     if op == 'merge': 
       try: 
       merge_bcards_ids = request.data["merge_bcards_ids"] 
       target_bacard_id = request.data["target_bacard_id"] 
       except: 
       merge_bcards_ids = None 
       target_bacard_id = None 
       print merge_bcards_ids 
       print merge_bcards_ids.__class__ 
+0

你能告訴我你的意見嗎? –

+0

是的,我編輯了這個問題。 – user3048148

+0

聽起來像客戶是問題所在。 –

回答

0

請求參數都是字符串。

您可能會轉儲字典(json.dumps)並將其作爲請求參數發送。 另一方面,您必須使用json.loads將您的數據轉換回字典。

另外,您也可以只轉儲數組"data":json.dumps([216,217]),然後將其作爲數組加載:json.loads(request.data["merge_bcards_ids"])

這可能會導致一些編碼/解碼錯誤(這取決於Python版本您正在使用)

0

我不知道爲什麼數據來爲unicode的,我也是通過這個同樣的情況通過一次和我通過從unicode數據轉換爲正常解決; 此代碼可能會幫助您做到這一點;

if isinstance(request.data['merge_bcards_ids'], unicode): 
    merge_bcards_ids = list(unicodedata.normalize('NFKD', request.data['merge_bcards_ids']).encode('ascii','ignore')) 
else: 
    merge_bcards_ids = request.data['merge_bcards_ids'] 

OR

merge_bcards_ids = [unicodedata.normalize('NFKD', ids).encode('ascii','ignore') for ids in list(unicodedata.normalize('NFKD', request.data['merge_bcards_ids']).encode('ascii','ignore'))).encode('ascii','ignore')] 
0

確保您提交請求時要使用的 「應用/ JSON的」 內容類型。

+0

是的內容類型是「application/json」 – user3048148