【问题标题】:How to escape double quotes in JSON如何在 JSON 中转义双引号
【发布时间】:2013-03-16 06:28:16
【问题描述】:

我正在尝试显示双引号,但它显示了一个反斜杠:

"maingame": {
    "day1": {
        "text1": "Tag 1",
        "text2": "Heute startet unsere Rundreise \\\"Example text\\\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.</strong> "
    }
}

在 html 中呈现时,它显示为\"Example text\"。正确的方法是什么?

【问题讨论】:

    标签: json


    【解决方案1】:

    对于那些想要使用开发人员 powershell 的人。以下是要添加到您的 settings.json 的行:

    "terminal.integrated.automationShell.windows": "C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
    "terminal.integrated.shellArgs.windows": [
        "-noe",
        "-c",
        " &{Import-Module 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\Common7\\Tools\\Microsoft.VisualStudio.DevShell.dll'; Enter-VsDevShell b7c50c8d} ",
        ],
    

    【讨论】:

      【解决方案2】:

      如果您想在 JSON 中转义双引号,请使用 \\ 转义它。

      如果你想创建以下 javascript 对象的 json 示例

      {time: '7 "o" clock'}
      

      那么你必须按照下面的方式写

      '{"time":"7 \\"o\\" clock"}'
      

      如果我们使用JSON.parse()解析它

      JSON.parse('{"time":"7 \\"o\\" clock"}')
      

      结果将是

      {time: "7 "o" clock"}
      

      【讨论】:

      • 这对我不起作用。我在使用内置 json 解析器的 Python。您使用哪种编程语言?
      • 以上代码适用于javascript而不是python
      【解决方案3】:

      请注意,这通常发生在内容被“双重编码”时,这意味着编码算法被意外调用了两次。

      第一次调用将编码“text2”值:

      FROM: Heute startet unsere Rundreise “示例文本”。 Jeden Tag wird ein neues Reiseziel angesteuert bis wir。

      收件人: Heute startet unsere Rundreise \"Example text\"。 Jeden Tag wird ein neues Reiseziel angesteuert bis wir。

      第二个编码然后再次转换它,转义已经转义的字符:

      FROM: Heute startet unsere Rundreise \"Example text\"。 Jeden Tag wrd ein neues Reiseziel angesteuert bis wir.

      收件人: Heute startet unsere Rundreise \\\"Example text\\\"。 Jeden Tag wrd ein neues Reiseziel angesteuert bis wir.

      因此,如果您负责这里的服务器的实现,请检查以确保没有两个步骤尝试对相同的内容进行编码。

      【讨论】:

      • 我相信编码器也会转义转义开关,所以我认为你的第二个 TO: 应该是:"Heute startet unsere Rundreise \\\"Example text\\\ ". Jeden Tag wrd ein neues Reiseziel angesteuert bis wir.
      • @Jonathan Mee:刚刚根据您的建议编辑了答案。理论上它是用 3 个反斜杠正确编写的,但 stackoverflow 也使用反斜杠进行引用并将第一个两个反斜杠转换为一个反斜杠
      【解决方案4】:

      何时何地改用\\\"。好吧,如果你和我一样,当我发现这个帖子后意识到自己在做什么时,你会觉得自己和我一样傻。

      如果您正在制作 .json 文本文件/流并从那里导入数据,那么双引号前只有一个反斜杠的主流答案:\" 就是您要寻找的答案。

      但是,如果您像我一样尝试让 w3schools.com“Tryit 编辑器”在 JSON.parse(text) 的输出中添加双引号,那么您正在寻找的那个是三重反斜杠双引号\\\"。这是因为您在 HTML &lt;script&gt; 块中构建文本字符串,并且第一个双反斜杠将单个反斜杠插入到字符串变量中,然后下面的反斜杠双引号将双引号插入到字符串中,以便生成的脚本字符串包含标准答案中的\",JSON 解析器会将其解析为双引号。

      <script>
        var text="{";
        text += '"quip":"\\\"If nobody is listening, then you\'re likely talking to the wrong audience.\\\""';
        text += "}";
        var obj=JSON.parse(text);
      </script>
      

      +1:因为它是一个 JavaScript 文本字符串,所以双反斜杠双引号 \\" 也可以;因为双引号不需要在单引号字符串中转义,例如 '\"''"' 导致相同的 JS 字符串。

      【讨论】:

      • 此解决方案有助于在 Swift 版本中构建添加到 JSON POST 参数的字符串。
      【解决方案5】:

      为了避免导致 JSON 数据出现问题的反斜杠,我使用了这个函数。

      //escape backslash to avoid errors
      var escapeJSON = function(str) {
          return str.replace(/\\/g,'\\');
      };
      

      【讨论】:

      • 我会鼓励程序员对内容进行编码,而不是删除(或“清理”)内容。曾经有这种“清理”数据库数据的想法——尤其是删除单引号 (')。程序员没有意识到人们不能使用自己的姓氏 (O'Doul)。我希望今天的程序员使用其他方式将原始内容放入数据库中,而无需剥离或清理数据。
      • 好的,为了安抚群众,我删除了字符剥离部分。 @DanBaker 请记住,剥离字符文本可能是使 JS 在客户端应用程序中安全的唯一方法。由于这个原因,Angular 默认会清理 HTML 输出。
      • 我同意 100% 有时必须对数据进行清理……而 XSS 就是其中之一。感谢您指出这一点。
      【解决方案6】:

      它显示反斜杠是因为您也在转义反斜杠。

      除了双引号,如果你想在你的 JSON 引用字符串中包含一个反斜杠,你还必须转义反斜杠。但是,如果您打算在转义序列中使用反斜杠,显然您不应该转义它。

      【讨论】:

        【解决方案7】:

        试试这个:

        "maingame": {
          "day1": {
            "text1": "Tag 1",
             "text2": "Heute startet unsere Rundreise \" Example text\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.</strong> "
          }
        }
        

        (引号前只有一个反斜杠 (\))。

        【讨论】:

        • @DWGuru 这与 cmets 无关,它是 ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf (第 9 段 - 字符串)中描述的转义序列,它说:All characters may be placed within the quotation marks except for the characters that must be escaped,然后指定:\" represents the quotation mark character (U+0022)
        • 由于某种原因,这不适用于 JS 中的 JSON.parse()。
        • @SacWebDeveloper var r = '{"a":"quotes\"here"}' // "{"a":"quotes"here"}"。您还需要转义字符串中的反斜杠,因此使用三重反斜杠,即。 var r = '{"a":"quotes\\\"here"}' // "{"a":"quotes\"here"}"。之后你可以使用JSON.parse(r)
        • @Qwerty 看来您只需要双反斜杠。 '{"a":"quotes\\"here"}'
        • @SacWebDeveloper 是的,确实如此,因为在单引号' ' 内,可以使用双引号而无需转义。我有点把两件事混合在一起,我在发布后意识到了这一点。在" 内部,尽管" \\\" "' \\" ' 相比,仍然需要使用三次转义。
        猜你喜欢
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多