【问题标题】:How to encode a python dictionary and decode in jquery? (via a cookie)如何编码python字典并在jquery中解码? (通过 cookie)
【发布时间】:2013-10-26 07:09:58
【问题描述】:

我正在尝试将 python 字典保存在 cookie 中,然后能够将 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 和 decoded_cookie 都是一样的

\173"key2": "value2"\054 "key1": "value1"\175

【问题讨论】:

    标签: python parsing cookies urllib


    【解决方案1】:

    我通过做这个服务器端想通了:

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

    使用 jquery 的客户端

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

    【讨论】:

      【解决方案2】:

      在 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'}"
      

      【讨论】:

      • 我在帖子中添加了更多信息。我最初将 dict 转换为包含正确 json 的字符串。当我通过 cookie 发送它并获取转义字符等时。我在解码时遇到问题。所以我真的不确定我是在发送正确的方式,还是只是没有在客户端使用正确的工具来解码它。有什么建议么?谢谢
      • HTTP 协议正在转义响应中的特殊字符。您需要使用 decodeURIComponent()
      • 我试过 decodeURIComponent() 并且它根本不影响字符串。
      • 你怎么称呼它的?它不应该改变字符串,但应该返回解码后的字符串。
      • 看起来如果反斜杠在字符串中被转义,那么你可以用 decodeURIComponent 做很多事情。您是否尝试设置 $.cookie.json = 1 并希望它为您解析,或者 $.cookie.raw = 1 并自己解码?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 2018-05-15
      • 2012-05-02
      • 2015-11-01
      • 2013-05-25
      • 1970-01-01
      • 2011-02-11
      相关资源
      最近更新 更多