2013-10-25 25 views
0

我想在一個cookie中保存一個python字典,然後能夠將cookie值轉換回在jQuery或JavaScript中的字典。我使用Python 3.3.1。我對格式(查詢字符串,JSON等)感到困惑。如何編碼一個python字典並在jquery中解碼? (通過cookie)

我使用這個jQuery的Cookie庫

https://github.com/carhartl/jquery-cookie

我曾嘗試以下:

服務器端:

import urlib.parse 
d= {'key1':'value1','key2':'value2'} 
cookie_data = urllib.parse.urlencode(d) 

客戶端:

cookie_data = $.cookie('Cookie_Name'); 
var dict = $.parseJson(cookie_data); 

這樣做的正確方法是什麼,所以我最終得到了客戶端的有效字典?

我也已經嘗試使用:

服務器端:

d = {'key1':'value1','key2':'value2'} 
cookie_data = json.dumps(d) 

它得到了我想要的JSON數據的字符串。

cookie_data現在是 '{ 「鍵1」: 「值1」, 「KEY2」: 「值2」}'

然而,當我把它作爲一個cookie字符串出來這樣

「\ 173 \「key2 \」:\「value2 \」\ 054 \「key1 \」:\「value1 \」\ 175「

這就是爲什麼我想我需要以某種方式編碼它。

我也曾嘗試:

var cookie_str = $.cookie('My_cookie'); 
var decoded_cookie = decodeURIComponent(cookie_str); 

兩個cookie_str和decoded_cookie是相同的

\ 173 「KEY2」: 「值2」 \ 054 「KEY1」: 「VALUE1」 \ 175

回答

1

我想通了做這個服務器端:使用jQuery

var dict = $.parseJSON($.cookie('MyCookie')); 
1

在JS中使用控制檯日誌記錄對於調試來回發送的信息非常有用。

console.log(cookie_data) 

將打印什麼實際存儲在$.cookie('Cookie_Name');

這裏的問題是,你存儲的URL編碼的值在服務器:key1=value1&key2=value2,但你想要的JSON:{"key1": "value1", "key2": "value2"}。您需要將數據編碼爲服務器上的JSON格式,因爲這正是客戶所期望的。

repr會讓你關閉,但它使用單引號和JSON標準爲字符串指定雙引號。你的客戶可能會接受這一點,但要符合標準,以及逃逸等數據,你應該使用Python庫編碼JSON,如simplejson

>>> simplejson.JSONEncoder().encode({'k':'v', 'k2': 'v2'}) 
'{"k2": "v2", "k": "v"}' 
>>> repr({'k':'v', 'k2': 'v2'}) 
"{'k2': 'v2', 'k': 'v'}" 
+0

import urlib.parse, json cookie_data = urllib.parse.quote(json.dumps(mydict)) 

客戶端我說更多的信息,以我的職務。我最初將dict轉換爲包含正確json的字符串。這是當我通過cookie發送它並獲得轉義字符等。我無法解碼它。所以我真的不確定我發送的是正確的方式,還是隻是不在客戶端使用適當的工具來解碼它。有什麼建議麼?謝謝 –

+0

HTTP協議正在逃避響應中的特殊字符。你需要使用decodeURIComponent() –

+0

我試過decodeURIComponent(),它根本不影響字符串。 –

相關問題