Javascript 为什么JSON.parse无法解析此JSON字符串:`{quot;搜索结果:\";:s\";:";}`?

Javascript 为什么JSON.parse无法解析此JSON字符串:`{quot;搜索结果:\";:s\";:";}`?,javascript,json,jsonlint,Javascript,Json,Jsonlint,为什么JSON.parse无法解析下面的JSON字符串 这不是有效的JSON吗 奇怪的是,即使其自定义抛出与JSON.parse相同的错误,也会验证该字符串 JSON字符串 { "Search results: \":s\"": "" } 代码 let test = `{ "Search results: \":s\"": "" }` JSON.parse(t

为什么
JSON.parse
无法解析下面的JSON字符串

这不是有效的JSON吗

奇怪的是,即使其自定义抛出与
JSON.parse相同的错误,也会验证该字符串

JSON字符串

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

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

VM1882:2未捕获的语法错误:JSON中位于位置的意外标记 22 在JSON.parse()处 时间:1:6


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

let测试=`{
“搜索结果:\\”:s\\:“”
}`
log(JSON.parse(test));
{'搜索结果::''''}


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

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

let测试=`{
“搜索结果:\\”:s\\:“”
}`
log(JSON.parse(test));
{'搜索结果::''''}


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

反斜杠字符引用外部级别字符串的
字符。由于有两个解析阶段,您必须将反斜杠加倍。或者您必须
let test=string.raw`{…}“ @ PosiTy感谢快速响应。要澄清,认为JSON是有效的吗?”托马斯使用<代码>字符串。RAW 似乎是有效的。你知道为什么吗?也不想发布答案吗?不,JSONLUNTY没有错,这是有效的JSON。问题是,你在逐个地将它逐字打印到JavaScript文档中,而不需要逃避它。JavaScript。如果您将相同的内容放入文本文件,加载文本文件,然后将内容解析为JSON,则可以正常工作。反斜杠字符引用外部级别字符串的
字符。您必须加倍反斜杠,因为有两个解析阶段。或者您必须
让test=String.raw`{…}`
@Pointy感谢您的快速响应。要澄清,认为JSON有效是错误的吗?@托马斯使用<代码> String。RAW < /C> >似乎起作用。你知道为什么吗?另外,你想发布一个答案吗?不,jsonlint.com没有错,这是有效的JSON。问题是您将它逐字输入到JavaScript文档中,而没有将其转义为JavaScript。如果您将相同的内容放入文本文件,加载文本文件,然后将内容解析为JSON,那么就可以了。谢谢。这帮助我们找到了根本原因。这个问题是这个问题的简化版本。谢谢。这帮助我们找到了根本原因。这个问题是这个问题的简化版本。