我试图显示双引号,但它显示了一个反斜杠:
"maingame": {
"day1": {
"text1": "Tag 1",
"text2": "Heute startet unsere Rundreise \\\"Example text\\\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.</strong> "
}
}
Run Code Online (Sandbox Code Playgroud)
在html中渲染时显示为\"Example text\".什么是正确的方法?
kam*_*uel 418
试试这个:
"maingame": {
"day1": {
"text1": "Tag 1",
"text2": "Heute startet unsere Rundreise \" Example text\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.</strong> "
}
}
Run Code Online (Sandbox Code Playgroud)
(\在引号前只有一个反斜杠()).
Gre*_*r y 25
何时何地使用\\\".好吧,如果你像我一样,当我发现这个帖子后,当我意识到自己在做什么时,你会感觉像傻一样.
如果您正在创建.json文本文件/流并从那里导入数据,那么在双引号之前只有一个反斜杠的主流回答:\"是您正在寻找的那个.
但是,如果你像我一样,并且你想让w3schools.com"Tryit Editor"在JSON.parse(文本)的输出中有双引号,那么你要找的是三元组反斜杠双引号\\\".这是因为您在HTML <script>块中构建文本字符串,并且第一个双反斜杠在字符串变量中插入单个反斜杠,然后以下反斜杠双引号将双引号插入到字符串中,以便生成的脚本字符串包含\"from标准答案和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>
Run Code Online (Sandbox Code Playgroud)
+1:因为它是一个JavaScript文本字符串,所以双反斜杠双引号\\"也可以工作; 因为双引号不需要在单个引用的字符串中进行转义,例如'\"'并'"'导致相同的JS字符串.
Ale*_*den 18
它显示了反斜杠,因为你也逃避了反斜杠.
除了双引号外,如果要在JSON引用的字符串中包含反斜杠,还必须转义反斜杠.但是,如果您打算在转义序列中使用反斜杠,显然您不应该逃避它.
小智 18
如果您使用的是 javascript、python 等,请使用原始字符串(pythonr''或 javascriptString.raw或类似字符串)。它们使编写 JSON 字符串变得更加容易,因为它们避免了多个转义序列处理。
console.log(JSON.parse(String.raw`"This is a double quote >> \" <<"`))
// => This is a double quote >> " <<
Run Code Online (Sandbox Code Playgroud)
在代码中编写 JSON 字符串时,一些混乱来自于多次处理的字符串转义序列。一次在编程语言中,再次在 JSON 解析器中(例如JSON.parse()在 Javascript 或类似语言中)
看到字符串在编程语言 repl 中的显示方式可能会令人困惑。
例如,当您直接在 javascript repl 中输入字符串时,它会以这种方式显示
'Two newlines:\n\nTab here >>\t<<\n\nBackslash here >>\\<<'
// => 'Two newlines:\n\nTab here >>\t<<\n\nBackslash here >>\\<<'
Run Code Online (Sandbox Code Playgroud)
但是当你console.log()输入字符串时,它会这样显示
console.log('Two newlines:\n\nTab here >>\t<<\n\nBackslash here >>\\<<')
/* =>
Two newlines:
Tab here >> <<
Backslash here >>\<<
*/
Run Code Online (Sandbox Code Playgroud)
当 javascript 遇到字符串时,它会在将其传递给函数之前“评估”转义序列,即它\n用换行符、\t制表符等替换每个转义序列。
console.log()所以它对字符串有很大帮助,可以更好地了解正在发生的事情。
要在 javascript 中写入"JSON,您可以使用
console.log(JSON.parse('"This is a double quote >> \\" <<"'));
// => This is a double quote >> " <<
Run Code Online (Sandbox Code Playgroud)
在 python 和其他语言中也是类似的。
\n用换行符、\t制表符等
替换。\\为\."This is a double quote >> \" <<"\n用换行符、\t制表符等替换。在我们的例子中,
",所以它知道这是一个 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 >> " <<
Run Code Online (Sandbox Code Playgroud)
man*_*nas 15
如果你想在 JSON 中转义双引号,请使用 \\ 来转义它。
例如,如果您想创建以下 javascript 对象的 json
{time: '7 "o" clock'}
Run Code Online (Sandbox Code Playgroud)
那么你必须按照以下方式写
'{"time":"7 \\"o\\" clock"}'
Run Code Online (Sandbox Code Playgroud)
如果我们解析它使用 JSON.parse()
JSON.parse('{"time":"7 \\"o\\" clock"}')
Run Code Online (Sandbox Code Playgroud)
结果将是
{time: "7 "o" clock"}
Run Code Online (Sandbox Code Playgroud)
小智 8
请注意,这通常发生在内容被"双重编码"时,这意味着编码算法被意外地调用了两次.
第一个调用将编码"text2"值:
来自: Heute startet unsere Rundreise"示例文本".Jeden Tag wird ein neues Reiseziel angesteuert bis wir.
TO: Heute startet unsere Rundreise \"示例文本\".Jeden Tag wird ein neues Reiseziel angesteuert bis wir.
第二个编码然后再次转换它,转义已经转义的字符:
来自: Heute startet unsere Rundreise \"示例文本\".Jeden Tag wird ein neues Reiseziel angesteuert bis wir.
TO: Heute startet unsere Rundreise \\\"示例文本\\\".Jeden Tag wird ein neues Reiseziel angesteuert bis wir.
因此,如果您负责此处的服务器实施,请检查以确保没有两个步骤尝试编码相同的内容.
为了转义导致 JSON 数据出现问题的反斜杠,我使用此函数。
//escape backslash to avoid errors
var escapeJSON = function(str) {
return str.replace(/\\/g,'\\');
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
357528 次 |
| 最近记录: |