【问题标题】:Javascript: Problems parsing document.cookie JSON objectJavascript:解析 document.cookie JSON 对象时出现问题
【发布时间】:2014-01-21 08:17:30
【问题描述】:

在服务器上,我将 JSON 对象存储为 cookie(使用 Django / json.dumps),它看起来像这样:

'{"name": "Simon", "gender": "M"}'

在客户端运行 document.cookie 时,我可以看到 cookie,它看起来像这样:

"user="{\"name\": \"Simon\"\054 \"gender\": \"M\"}";

我有一个按名称检索 cookie 的小函数( getCookie('user') )它返回一个字符串:

"{\"name\": \"Simon\"\054 \"gender\": \"M\"}"

我想将它解析回一个 JSON 对象,以便在客户端进一步使用,但是 JSON.parse() 返回错误:“SyntaxError: Unexpected number”。

奇怪的是,如果你运行以下命令:

JSON.parse("{\"name\": \"Simon\"\054 \"gender\": \"M\"}") 

直接在控制台中它工作正常。有什么想法吗?

如果有更好的方法来存储 cookie 等,我愿意接受意见

提前致谢。

【问题讨论】:

  • \054 在那里做什么?
  • 你不能在 Cookie 中插入逗号,因为在 cookie 逻辑中已经是一个分隔符,所以:'{\"name\": \"Simon\"\054 \"gender\": \"M\"}'.replace("\054",","); 首先。

标签: javascript django json cookies


【解决方案1】:

\054 正在破坏您的 json。这是一个编码的,(逗号)。

这个:

string.replace(/\\054/g, ',');

应该这样做。

【讨论】:

  • \ 不会替换,当我尝试 string.replace('\054', ',') 我得到相同的字符串
  • 反斜杠不要被替换,试试双反斜杠 \\
  • +1 是正确的,\054 破坏了 JSON,现在只是想弄清楚为什么我不能替换它:/
  • 我的错...为了方便提问,我只在 JSON 中显示 2 个项目,实际上有很多数据。您的答案是正确的,但它只是替换了 \054 的单个实例。 str.replace(/\\054/g, ",") 成功了,感谢您的帮助
  • 我会将其添加到答案中:) 很高兴能提供一些帮助。
【解决方案2】:

逗号是 Cookie 中的非法字符...而且不是唯一的,为了防止出现问题,也许您可​​以在放入 cookie 之前对 JSON 进行编码:

encodeURIComponent('{"name": "Simon", "gender": "M"}');
//return "%7B%22name%22%3A%20%22Simon%22%2C%20%22gender%22%3A%20%22M%22%7D"

decodeURIComponent('%7B%22name%22%3A%20%22Simon%22%2C%20%22gender%22%3A%20%22M%22%7D');
//return '{"name": "Simon", "gender": "M"}'

这个答案更好地解释了 cookie 中“允许的字符”的世界: Allowed characters in cookies

:) 我希望它可以帮助...

【讨论】:

  • +1 获取有关“允许的 cookie”的信息,我希望在服务器上创建一些我可以在客户端上轻松解析为 JSON 的内容,Python 并不容易
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 2014-08-23
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多