2

我将此字符串存储在 cookie 中

"d967fac49ef2466239168bbbde0a8d755a27ba81$[[\"__json_message\"\05425\054\"This is a message.\"]]"

又名

"\"d967fac49ef2466239168bbbde0a8d755a27ba81$[[\\\"__json_message\\\"\\05425\\054\\\"This is a message.\\\"]]\""

(用于粘贴到控制台)

但我无法用 JSON.parse 解析它。但是,它适用于 eval (这是邪恶的)。错误是SyntaxError: Unexpected number

值得注意的是转义的逗号。这是使用 Django 消息传递 API 生成的。

有谁知道一个好的正则表达式或其他可以做到这一点的技术?

我首先需要对字符串进行转义(因为它是正确的 javascript 字符串),然后我需要美元( )之后的数组s.substring(s.indexOf("$")+1)

4

1 回答 1

3

很抱歉不清楚,我想通了,感谢 jfriend00 对 json.org 的链接。下面是一个有效的等效字符串,以及正确的输出应该是什么。它是一个已编码字符串中的 JSON 数组,我需要轻松地对其进行转义。

var s = JSON.parse("\"d967fac49ef2466239168bbbde0a8d755a27ba81$[[\\\"__json_message\\\"\\u002C25\\u002C\\\"This is a message.\\\"]]\"")
// s = "d967fac49ef2466239168bbbde0a8d755a27ba81$[["__json_message",25,"This is a message."]]"
// and then I get what I actually want
var a = JSON.parse(s.substring(s.indexOf("$")+1))

问题是,当为 cookie 准备字符串时,逗号被转换为 JSON 不允许的八进制转义码。错误代码应该是JSON forbids octal prefixes. 处理好之后就好了。所以我只检查八进制转义码并用十六进制转义码替换它们。


TL;DR:“SyntaxError:意外数字”表示“SyntaxError:JSON 禁止使用八进制前缀”


这是我使用的功能

var s = "\"d967fac49ef2466239168bbbde0a8d755a27ba81$[[\\\"__json_message\\\"\\05425\\054\\\"This is a message.\\\"]]\""
var re = /\\0([0-7]{2})/g
JSON.parse(s.replace(re, function(m, n){return "\\x"+("0000"+parseInt(n,8).toString(16)).slice(-4)}))
于 2012-08-26T23:56:54.787 回答