如果你在使用JavaScript、Python等语言,可以使用原始字符串(Python的r''或JavaScript的String.raw或类似的方式)。它们使得编写JSON字符串更加容易,因为它们避免了多次转义处理。
console.log(JSON.parse(String.raw`"This is a double quote >> \" <<"`))
更深入了解
在编写代码时,有时会因为字符串转义序列被多次处理而导致对JSON字符串的混淆。一次是在编程语言中,另一次是在JSON解析器中(例如在Javascript中的
JSON.parse()
或类似的函数)。
使用编程语言的打印函数来查看在编程语言中发生的转义可以让人感到困惑。
例如,当您直接在Javascript repl中输入字符串时,它会以这种方式显示。
'Two newlines:\n\nTab here >>\t<<\n\nBackslash here >>\\<<'
但是当你使用
console.log()
打印这个字符串时,它会以这种方式显示
console.log('Two newlines:\n\nTab here >>\t<<\n\nBackslash here >>\\<<')
当JavaScript遇到一个字符串时,它会在将其传递给函数之前'评估'转义序列,也就是说,它会将每个
\n
替换为换行符,每个
\t
替换为制表符等等。
因此,通过
console.log()
输出字符串可以更好地了解发生了什么。
如何在JavaScript中对JSON中的单引号进行编码
要在JavaScript中将
"
写入JSON,可以使用
console.log(JSON.parse('"This is a double quote >> \\" <<"'));
在Python和其他编程语言中,这个过程是类似的。
逐步操作:
JavaScript使用转义序列规则来评估字符串,根据JavaScript规范将
\n
替换为换行符,
\t
替换为制表符等等。
在我们的例子中,它将
\\
替换为
\
。
结果字符串为
"This is a double quote >> \" <<"
。
我们加上外部的双引号,使其成为一个有效的JSON字符串。
JavaScript将结果传递给JSON.parse()函数。
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 >> \" <<"`))
var r = '{"a":"quotes\"here"}' // "{"a":"quotes"here"}"
. 你需要同样转义字符串中的反斜杠,因此使用三个反斜杠,即var r = '{"a":"quotes\\\\\"here"}' // "{"a":"quotes\"here"}"
。之后你就可以使用JSON.parse(r)
。 - Qwerty'{"a":"quotes\\"here"}'
- SacWebDeveloper' '
里,双引号可以不用转义,我有点把两件事搞混了,发帖之后才意识到。但在"
里仍然需要使用三重转义符" \\\" "
与' \\" '
. - Qwerty