【问题标题】:Error in parsing backslash escape sequence in JSON解析 JSON 中的反斜杠转义序列时出错
【发布时间】:2018-09-15 08:41:56
【问题描述】:

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

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

以上代码报错:

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

现在下面的代码可以工作了:

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

显示输出:

{AccountName: "NT AUTHORITY\SYSTEM"}

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

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

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    首先,模板文字被解析。就像在普通字符串中一样,双反斜杠被翻译成单个 literal 反斜杠。所以,你最初的inputString

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

    将有一个单个反斜杠。

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

    与普通的 Javascript 字符串(其中不必要的反斜杠被忽略)不同,JSON 格式要求将反斜杠放在要转义的特殊字符之前(如 " 或另一个 \)。如果反斜杠和后面的字符转换为转义字符,则会抛出一个SyntaxError,就像您在问题中看到的那样。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-01
        • 2014-10-29
        • 2017-05-01
        • 1970-01-01
        • 2016-06-03
        • 1970-01-01
        • 2015-05-19
        相关资源
        最近更新 更多