在 javascript 中转义双引号
Escaping double quotation in javascript
我在解析看似有效的内容时遇到错误 json。 JSON 字符串在字符串中包含转义的双引号字符。
我已将示例浓缩为尽可能简单以便复制并粘贴在下方。我用来测试的浏览器是 Chrome 版本 100.0.4896.75.
谁能帮我理解我做错了什么?
let a = JSON.parse('{"a": "\""}');
Error: {
"message": "SyntaxError: JSON.parse: expected ',' or '}' after property value in object at line 1 column 9 of the JSON data",
"filename": "https://stacksnippets.net/js",
"lineno": 13,
"colno": 22
}
在您的案例中要解析的有效字符串应该是:
const str = '{"a":"\""}'
const parsedStr = JSON.parse(str);
console.log(parsedStr);
解释:
以下是无效的字符串初始化
const str = "\";
有效的语法是:
const str = "\";
console.log(str);
因此,\
转换为 \
(第一个转义第二个)。
在你的情况下,转义的 \
然后用于转义 "
。
此外,此输出:
const str = "\\";
console.log(str);
const strWithQuote = "\\"\";
console.log("String with quote: ", strWithQuote);
您需要在字符串文字中使用 2 个斜杠来表示字符串中的单个斜杠。
或者您也可以使用原始字符串模板。
let a = JSON.parse('{"a": "\""}');
let b = JSON.parse(String.raw`{"b": "\""}`);
console.log(a,b);
JSON 解析器正在接收值 '{"a": """}'
,因为 \
本身 未转义。
如果你这样做
JSON.stringify({ "a": "\"" })
你会看到字符串化后的结果是'{"a":"\""}'
.
我在解析看似有效的内容时遇到错误 json。 JSON 字符串在字符串中包含转义的双引号字符。
我已将示例浓缩为尽可能简单以便复制并粘贴在下方。我用来测试的浏览器是 Chrome 版本 100.0.4896.75.
谁能帮我理解我做错了什么?
let a = JSON.parse('{"a": "\""}');
Error: { "message": "SyntaxError: JSON.parse: expected ',' or '}' after property value in object at line 1 column 9 of the JSON data", "filename": "https://stacksnippets.net/js", "lineno": 13, "colno": 22 }
在您的案例中要解析的有效字符串应该是:
const str = '{"a":"\""}'
const parsedStr = JSON.parse(str);
console.log(parsedStr);
解释:
以下是无效的字符串初始化
const str = "\";
有效的语法是:
const str = "\";
console.log(str);
因此,\
转换为 \
(第一个转义第二个)。
在你的情况下,转义的 \
然后用于转义 "
。
此外,此输出:
const str = "\\";
console.log(str);
const strWithQuote = "\\"\";
console.log("String with quote: ", strWithQuote);
您需要在字符串文字中使用 2 个斜杠来表示字符串中的单个斜杠。
或者您也可以使用原始字符串模板。
let a = JSON.parse('{"a": "\""}');
let b = JSON.parse(String.raw`{"b": "\""}`);
console.log(a,b);
JSON 解析器正在接收值 '{"a": """}'
,因为 \
本身 未转义。
如果你这样做
JSON.stringify({ "a": "\"" })
你会看到字符串化后的结果是'{"a":"\""}'
.