0

为什么JSON.parse解析下面的 JSON 字符串失败?

这不是有效的 JSON 吗?

奇怪的是,https: //jsonlint.com/会验证这个字符串,即使它的自定义JSON 解析器会抛出与JSON.parse.

JSON字符串

{
    "Search results: \":s\"": ""
}

代码

let test = `{
    "Search results: \":s\"": ""
}`
JSON.parse(test);

结果

VM1882:2 Uncaught SyntaxError: Unexpected token s in JSON at JSON.parse () at :1:6 的位置 22

4

1 回答 1

2

使用双反斜杠来转义 JavaScript 字符串中的引号,这些字符串将被解析为 JSON:

let test = `{
  "Search results: \\":s\\"": ""
}`
console.log(JSON.parse(test));

{ 'Search results: ":s"': '' }

如上面评论中所述,在 JavaScript 代码字符串中编写引号时会出现问题,因为反斜杠本身必须被转义以保留在字符串中作为 JSON.parse 将来的反斜杠。JavaScript 将字符串中的第一个反斜杠视为转义字符,而不是这种情况下必需的文字字符。如果数据是从 JavaScript 代码以外的其他来源读取的,则只需要一个反斜杠。

于 2021-04-25T00:48:02.920 回答