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 对象时出现问题的主要内容,如果未能解决你的问题,请参考以下文章