复制和粘贴带有转义引号的字符串化对象时的 JSON.parse 异常

JSON.parse exception when copy & pasting stringified objects with escaped quotes

本文关键字:字符串 对象 JSON 异常 parse 转义 复制      更新时间:2023-09-26

我必须字符串化一些JS对象才能将文本保存在某个地方,我希望之后能够手动复制保存的文本,并通过控制台将其传递给一个函数,然后解析文本以对原始对象执行某些操作。

不幸的是,解析粘贴的文本似乎存在转义双引号的问题,因为解析总是失败。

创建了一个小片段来说明我的问题:

http://jsfiddle.net/wgwLcgz6/1/

var jsonStr = JSON.stringify({ arg1: 'some string "with quotes"' });
$('#out1').html(jsonStr); // {"arg1":"some string '"with quotes'""}
JSON.parse(jsonStr); // Works just fine
try {
    // Copied the ouput of JSON.stringify manually and pasted it directly into
    // the parse function...
    JSON.parse('{"arg1":"some string '"with quotes'""}');
    // We never get here since an exception is thrown
    $('#out2').html('Parsed successfully');
} catch (ex) {
    // SyntaxError: Unexpected token w
    $('#out2').html(ex.toString());
}

我想我确实理解为什么会发生这种情况,即使我无法正确解释它,但我对如何规避这一点一无所知,并且非常感谢一些帮助和更深入的解释。

还有一件事:如果我将字符串化对象{"arg1":"some string '"with quotes'""}粘贴到在线 json 解析器中,例如 http://jsonlint.com/它可以很好地解析它,我想这是因为他们使用自己的解析器而不是内置的浏览器......

您需要转义引号和反斜杠。由于您在带有双引号的字符串周围使用单引号,因此您只需转义反斜杠:

JSON.parse('{"arg1":"some string ''"with quotes''""}');