2016-06-20 78 views
0

當我通過角度調用post請求並傳遞數據,然後在django視圖中接收數據時,數據將成爲一個帶有unicode鍵和值的對象。來自Angular請求的Django unicode對象

樣品。

//from angular 
$http.post("url_here",{"name" : "alde","grade" : 94}) 

//views.py 
data_from_angular = json.loads(request.body.decode("utf-8")) 
print(data_from_angular) 
>>>> {u'name' : u'alde', u'grade' : u'84'} // this is the problem 
>>>> {'name' : 'alde', 'grade' : 84} // I want this result so that I can have the 'grade' as number not unicode. 

我希望你能幫助我。謝謝!

編輯

的問題是在我的JSON數據。數字84被表示爲字符串。感謝@Sudlip指出我的問題。

回答

1

u-前綴意味着你有一個Unicode字符串。當你真正使用這個字符串時,它不會出現在你的數據中。

如果你真的希望將其轉換爲普通字符串可以轉換key和使用字典理解和str關鍵字:

data_from_angular = dict((str(k), str(v)) for k, v in data_from_angular.items()) 
+0

感謝您的回覆@蘇迪。我知道,你把所有的關鍵和價值轉換成了字符串,但是'等級'呢?我希望它是一個數字。 – aldesabido

+0

@aldesabido你可以顯示原始的JSON數據。看起來84被表示爲字符串而不是數字。它與unicode無關。 –

+0

@Sudlip現在明白了。 JSON數據中的數字84是「84」。我的錯。 tsk2。感謝您指出了這一點。 – aldesabido

0

我覺得值,這應該工作

data_from_angular = json.loads(request.body.decode("utf-8")) 
another_dict = dict() 
for k, v in data_from_angular.iteritems(): 
    if v.isdigit(): 
     another_dict[k] = v 
    elif v.isalpha(): 
     another_dict[k] = v 
    else: 
     # do something here 

我喜歡這比聰明的線上人員,因爲在車道六個月後,一個傻瓜會研究該代碼,並問這是什麼在這裏oneliner ..?那個傻瓜可能是任何人包括你自己! 這是從y的個人經驗得出