在 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":"\""}'.