2011-04-12 44 views
2

我正在構建一個使用json-rpc與django後端進行通信的應用程序。到目前爲止,所有工作都很好。然而,我發現發送「 」的異常。據我所知,請求工作正常,但Django嚴重解釋響應。json-rpc格式錯誤的請求與 

請求::

{"jsonrpc":"2.0","id":"1","method":"test","params": 
{"id":"80","name":"tests","introduction":"hello  there"}} 

Django的接收:

<QueryDict:u'{"jsonrpc":"2.0","id":"1","method":"test","params": 
{"id":"80","name":"tests","introduction":"hello ': [u''], u'nbsp': [u''], u'there"}}': [u'']}> 

預期響應:

<QueryDict: {u'{"jsonrpc":"2.0","id":"1","method":"test","params": 
{"id":"80","name":"tests","introduction":"hello &nbsp;there"}}': [u'']}> 

好像django的解釋下面我已經再現的簡化請求和響應&和;作爲特殊字符,因此會在其request.POST變量中創建一個意外字典。

我需要做些什麼來確保json字符串不會變形?我曾嘗試使用php htmlspecialchars()方法對其進行編碼,但由於不會刪除'&',所以問題仍然存在。

任何幫助將不勝感激。

+1

解決方法:如果它只是nbsp,那麼在那裏使用原始的UTF-8字符。 – mario 2011-04-14 06:43:12

+0

感謝您的建議。我已經嘗試過了,但我認爲django在獲得機會之前會轉換角色。到目前爲止,我只是手動刪除了空格,現在對我來說很有用。 – Gevious 2011-05-10 07:52:50

+0

默認字符集是UTF-8,除非您在設置中指定其他內容。 http://docs.djangoproject.com/en/dev/ref/settings/#default-charset。 – 2011-05-10 07:58:45

回答

1

Django是通過解碼體(你的JSON字符串),就好像它是一個查詢字符串處理(POST?)的要求,並不是一個JSON。

在查詢字符串中,&;表示鍵值對的結尾。在這兩個字符上分割請求主體將產生您在Django QueryDict中看到的key:value對。

您需要掌握POST請求主體,並使用標準lib json或simplejson模塊將其明確解碼爲字典。

我有Django的一點經驗特別,但我想,在某處你的視圖處理程序,你會做一個類似於:

try: 
    data = json.loads(requesst.raw_post_data) 
    ## work with the data... 
except ValueError: 
    ## do something... 

毫無疑問,Django提供了一個方法來移動這個JSON處理出你的看法,並在某個地方更合適。

+0

太好了。 request.raw_post_data正是我所需要的。 – Gevious 2011-05-11 09:28:05