代码之家  ›  专栏  ›  技术社区  ›  RBT

分析JSON中的反斜杠转义序列时出错

  •  3
  • RBT  · 技术社区  · 7 年前

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

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

    以上代码给出错误:

    在JSON.parse文件()

    下面的代码工作:

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

    它显示输出:

    {AccountName: "NT AUTHORITY\SYSTEM"}
    

    \\ ?

    我从被调用的API得到的JSON响应只给了我两个 哪里有路。所以我的密码被破解了。我相信API的JSON格式是正确的。当我试图在网上解析这个响应时 JSON viewer 然后他们就能成功地解析它。

    2 回复  |  直到 7 年前
        1
  •  3
  •   CertainPerformance    7 年前

    字面意义的 inputString

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

    会有一个 单一的

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

    要求 " 或者别的 \ 没有 翻译成转义字符 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))
        2
  •  0
  •   marzelin    7 年前