Javascript:解析 document.cookie JSON 对象时出现问题

Posted

技术标签:

【中文标题】Javascript:解析 document.cookie JSON 对象时出现问题【英文标题】:Javascript: Problems parsing document.cookie JSON object 【发布时间】: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",","); 首先。 【参考方案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 并不容易

以上是关于Javascript:解析 document.cookie JSON 对象时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript-预解析

JavaScript 之 预解析

JavaScript 之 预解析

JavaScript 预解析

0143 JavaScript预解析:概念变量预解析函数预解析函数表达式声明函数问题

javascript预解析和作用域