繁体   English   中英

在JSON中解析反斜杠转义序列时出错

[英]Error in parsing backslash escape sequence in JSON

我正在尝试解析从API获取的JSON字符串:

 var inputString = '{ "AccountName": "NT AUTHORITY\\\\SYSTEM"}' console.log(JSON.parse(inputString)) // View in browser console to see real error 

上面的代码给出错误:

未捕获的SyntaxError:在program.html的JSON.parse()位置31的JSON中出现意外的标记:7

现在下面的代码工作:

 var inputString = '{ "AccountName": "NT AUTHORITY\\\\\\\\SYSTEM"}' console.log(JSON.parse(inputString)) 

它显示了输出:

{AccountName: "NT AUTHORITY\SYSTEM"}

反斜杠字符是JSON中的转义序列。 但为什么我需要四个反斜杠来创建一个反斜杠? 不应该只是\\\\

我从被调用的API中获取的JSON响应只给了我两个\\\\ ,其中有一条路径。 所以我的代码破了。 我相信API的JSON格式是正确的。 当我尝试在在线JSON查看器上解析此响应时,他们能够成功解析它。

首先,解析模板文字。 就像在普通字符串中一样,双反斜杠被转换为单个字面反斜杠。 所以,你的初始inputString

var inputString = `{ "AccountName": "NT AUTHORITY\\SYSTEM"}`

将在其一个反斜杠。

 console.log(`\\\\`.length); 

不同于普通的JavaScript字符串(其中不必要的反斜杠,恰恰忽略了),JSON格式要求反斜杠前面一个特殊的字符转义(如"或其他\\ )。如果一个反斜杠和下面的字符转换为转义字符,将抛出您在问题中看到的SyntaxError

因此,要在JSON中指示文字反斜杠,您需要在JSON中使用两个反斜杠,并且要在Javascript字符串中指示文字反斜杠,您还需要两个反斜杠。 在一起,您需要四个反斜杠以指示JSON中的文字反斜杠。

如果您希望手动编写包含文字反斜杠的字符串,并且不需要使用转义字符,则可以考虑使用String.raw作为模板文字,将单个反斜杠解析为文字反斜杠而不是转义序列的一部分:

 console.log( String.raw`\\\\`.length ); const inputString = String.raw`{ "AccountName": "NT AUTHORITY\\\\SYSTEM"}`; console.log(JSON.parse(inputString)) 

你在模板字符串中有字符串。 模板字符串消耗一个反斜杠,另一个用于引用文本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM