如何在JSON中逃避双引号

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

"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\"。正确的方法是什么?

716674 次浏览

试试这个:

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

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

它显示了反斜杠因为你也在转义反斜杠。

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

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

第一个调用将对"text2"值进行编码:

来自: Heute startunsere Rundreise“示例文本”。吉登·泰格之爱在新,瑞泽尔之爱在双。

: Heute startunsere Rundreise \"示例文本\"。吉登·泰格之爱在新,瑞泽尔之爱在双。

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

来自: Heute startunsere Rundreise \"示例文本\"。吉登·泰格之爱在新,瑞泽尔之爱在双。

: Heute startunsere Rundreise \\\"示例文本\\\"。吉登·泰格之爱在新,瑞泽尔之爱在双。

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

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

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

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

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

然而,如果你像我一样,试图让w3schools.com的“Tryit编辑器”在JSON.parse(文本)的输出中有双引号,那么你要找的是三反斜杠双引号\\\"。这是因为您正在HTML <script>块中构建文本字符串,第一个双反斜杠将一个反斜杠插入到字符串变量中,然后下面的反斜杠双引号将双引号插入到字符串中,因此结果脚本字符串包含来自标准答案的\", 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字符串。

如果你想在JSON中转义双引号,使用\\来转义。

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

{time: '7 "o" clock'}

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

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

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

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

结果将是

{time: "7 "o" clock"}

对于那些想使用开发人员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} ",
],

博士tl;

如果你在javascript/python/等等。,使用原始字符串(python的r''或javascript的String.raw或类似)。它们使编写JSON字符串变得更容易,因为它们避免了多个转义序列处理。

console.log(JSON.parse(String.raw`"This is a double quote >> \" <<"`))
// => This is a double quote >> " <<

更深入

在代码中编写JSON字符串时,由于字符串转义序列被多次处理而导致一些混乱。一次在编程语言中,一次在JSON解析器中(例如Javascript中的JSON.parse(),或类似)

使用该语言的print函数查看编程语言中发生了哪些转义

在编程语言repl中如何显示字符串可能会令人困惑。

例如,当你直接在javascript repl中输入一个字符串时,它会以这种方式显示

'Two newlines:\n\nTab here >>\t<<\n\nBackslash here >>\\<<'
// => 'Two newlines:\n\nTab here >>\t<<\n\nBackslash here >>\\<<'

但是当你console.log()字符串时,它会这样显示

console.log('Two newlines:\n\nTab here >>\t<<\n\nBackslash here >>\\<<')
/* =>
Two newlines:


Tab here >> <<


Backslash here >>\<<
*/

当javascript遇到字符串时,它会在将其传递给函数之前“计算”转义序列,例如,它会将每个\n替换为换行符,将每个\t替换为制表符,等等。

因此,console.log()字符串有助于更好地了解正在发生的事情。

如何在javascript中编码JSON中的单引号

要用javascript将"写入JSON,您可以使用

console.log(JSON.parse('"This is a double quote >> \\" <<"'));
// => This is a double quote >> " <<

在python和其他语言中也是类似的。

循序渐进:

  1. javascript使用javascript规范中的转义序列规则计算字符串,用换行字符替换\n,用制表符替换\t,等等。
    • 在我们的例子中,它用\替换了\\
    • 结果字符串是"This is a double quote >> \" <<"
    • 我们使用外部双引号使其成为有效的JSON字符串
  2. javascript接受结果并将其传递给JSON.parse() fn。
  3. <李> JSON。parse使用JSON标准中的转义序列规则计算字符串,将\n替换为换行字符,\t替换为制表符字符,等等。在我们的例子中,
    • 它看到的第一个字符是",所以它知道这是一个JSON字符串。
    • 在JSON字符串中,它看到\"。通常"将结束JSON字符串,但因为"是用\转义的,所以它知道这不是字符串的结束,并将\"替换为双引号字符。
    • 它看到的最后一个字符是",所以它知道这是JSON字符串的结束
    • 解析的结果字符串是This is a double quote >> " <<。注意外面的双引号也不见了。

原始字符串使事情变得更容易

Javascript的String.raw模板函数和python的r''字符串不做任何转义序列求值,因此这使得它更容易理解,也更容易理解

console.log(JSON.parse(String.raw`"This is a double quote >> \" <<"`))
// => This is a double quote >> " <<