2015-12-02 52 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