JSON.parse() 和转义字符在 JavaScript 中如何工作?

hh5*_*188 2 javascript json escaping

假设我有一个对象变量:

var obj = {
    key: '\"Hello World\"'
}
Run Code Online (Sandbox Code Playgroud)

JSON.stringify然后我尝试在 Chrome devtools 控制台中使用将其解析为字符串:

JSON.stringify(obj) // "{"key":"\"Hello World\""}"
Run Code Online (Sandbox Code Playgroud)

我得到结果了"{"key":"\"Hello World\""}"。然后我把它交给一个字符串

var str = '{"key":"\"Hello World\""}'
Run Code Online (Sandbox Code Playgroud)

至少我尝试将其转换回 obj:

JSON.parse(str);
Run Code Online (Sandbox Code Playgroud)

但浏览器告诉我错误Uncaught SyntaxError

让我困惑的是为什么这是错误的?我从原始对象获取字符串,我只想将其返回。

我该如何解决这个问题?如果我想做像将 obj 转换为字符串并将其返回这样的工作,我该怎么办?

Que*_*tin 5

您尝试通过将 JSON 包装在'字符中将其转换为字符串文字,但\字符在 JavaScript 字符串文字中具有特殊含义,并且在到达 JSON 解析器之前由 JavaScript 解析器\"转换。"

你也需要逃避\角色。

var str = '{"key":"\\"Hello World\\""}'
Run Code Online (Sandbox Code Playgroud)

也就是说,一般来说,最好不要尝试将 JSON 嵌入到 JavaScript 字符串文字中,只是为了首先使用 JSON.parse 来解析它们。JSON 语法是 JavaScript 的子集,因此您可以直接使用它。

var result = {"key":"\"Hello World\""};
Run Code Online (Sandbox Code Playgroud)