我正在尝试解析从 API 获取的 JSON 字符串:
var inputString = '{ "AccountName": "NT AUTHORITY\\SYSTEM"}'
console.log(JSON.parse(inputString)) // View in browser console to see real errorRun Code Online (Sandbox Code Playgroud)
上面的代码给出错误:
未捕获的语法错误:JSON 中的意外标记 S 位于 program.html:7 处 JSON.parse () 的位置 31 处
现在下面的代码可以工作:
var inputString = '{ "AccountName": "NT AUTHORITY\\\\SYSTEM"}'
console.log(JSON.parse(inputString))Run Code Online (Sandbox Code Playgroud)
它显示了输出:
{AccountName: "NT AUTHORITY\SYSTEM"}
Run Code Online (Sandbox Code Playgroud)
反斜杠字符是 JSON 中的转义序列。但是为什么我需要四个反斜杠来创建一个反斜杠呢?不应该只是吗\\?
我从被调用的 API 获得的 JSON 响应\\在有路径的情况下只给了我两个。所以我的代码被破坏了。我相信API的JSON格式是正确的。当我尝试在在线JSON 查看器上解析此响应时,他们能够成功解析它。
首先,解析模板文字。就像普通字符串一样,双反斜杠被翻译为单个反斜杠。所以,你的初始inputString:
var inputString = `{ "AccountName": "NT AUTHORITY\\SYSTEM"}`
Run Code Online (Sandbox Code Playgroud)
其中会有一个反斜杠。
var inputString = `{ "AccountName": "NT AUTHORITY\\SYSTEM"}`
Run Code Online (Sandbox Code Playgroud)
与普通的 Javascript 字符串(其中不必要的反斜杠被忽略)不同,JSON 格式要求反斜杠位于要转义的特殊字符之前(例如 a"或 another \)。如果反斜杠和后面的字符没有转换为转义字符,SyntaxError则会抛出类似于您在问题中看到的字符。
因此,要在 JSON 中指示文字反斜杠,您需要在 JSON 中使用两个反斜杠,而要在 Javascript 字符串中指示文字反斜杠,您也需要两个反斜杠。您总共需要四个反斜杠才能在 JSON 中指示文字反斜杠。
如果您希望手动编写包含文字反斜杠的字符串,并且不需要使用转义字符,则可以考虑使用String.raw模板文字,它将单个反斜杠解析为文字反斜杠,而不是作为转义序列的一部分:
console.log(`\\`.length);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2580 次 |
| 最近记录: |