因为您是在字符串文字中创建该 JSON,所以您需要转义 \ 本身:
var content = $.parseJSON('{"foobar" : "hallo\\"tow"}');
console.log(content);
解释:
在 JSON 中," 字符使用\ 字符进行转义。这使得以下 JSON 完全有效:
{"foobar" : "hallo\"tow"}
现在,在您的示例中,您在 JavaScript 字符串中构造了这个 JSON 值:
'{"foobar" : "hallo\"tow"}'
这引入了一个微妙的问题,因为 JavaScript 字符串也用\ 字符转义" 字符。也就是下面的字符串字面量:
'\"'
...持有价值:
"
现在,再次将其应用于您的示例,我们发现这个字符串文字:
'{"foobar" : "hallo\"tow"}'
...实际上持有值:
{"foobar" : "hallo"tow"}
如您所见,我们丢失了\。幸运的是,这很容易解决,因为 \ 字符也可以在 JavaScript 字符串中使用 \ 字符进行转义,这就是我的解决方案所做的。所以现在,修改后的字符串文字:
'{"foobar" : "hallo\\"tow"}'
被解析为包含预期值的字符串:
{"foobar" : "hallo\"tow"}
... 然后可以将其解析为格式正确的 JSON。
从textarea 读取或作为 ajax 请求的结果时没有此问题的原因是 JSON 值不是由字符串文字定义的。额外的 \ 仅是由于字符串文字语法所必需的,并且竞争正在进行中,谁将首先逃脱 " 引号(嗯,不是真正的竞争......字符串文字总是获胜)。