我试图在cookie中保存python字典,然后能够将cookie值转换回jquery或javascript中的dict。我正在使用python 3.3.1。我对格式(查询字符串,json等)感到困惑。
我正在使用这个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现在是'{“key1”:“value1”,“key2”:“value2”}'
然而,当我把它作为cookie发送时,字符串就像这样
“\ 173 \”key2 \“:\”value2 \“\ 054 \”key1 \“:\”value1 \“\ 175”
这就是为什么我认为我需要以某种方式对其进行编码。
我也尝试过:
var cookie_str = $.cookie('My_cookie');
var decoded_cookie = decodeURIComponent(cookie_str);
cookie_str和decoding_cookie都是相同的
\ 173“key2”:“value2”\ 054“key1”:“value1”\ 175
答案 0 :(得分:2)
我通过这个服务器端来解决这个问题:
import urlib.parse, json
cookie_data = urllib.parse.quote(json.dumps(mydict))
客户端使用jquery
var dict = $.parseJSON($.cookie('MyCookie'));
答案 1 :(得分: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'}"