如何编码python字典并在jquery中解码? (通过cookie)

时间:2013-10-25 17:51:44

标签: python parsing cookies urllib

我试图在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

2 个答案:

答案 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'}"