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,那么就可以了。谢谢。这帮助我们找到了根本原因。这个问题是这个问题的简化版本。谢谢。这帮助我们找到了根本原因。这个问题是这个问题的简化版本。