我必须对某些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\""}
粘贴到像http://jsonlint.com/这样的在线json解析器中,它解析它就好了,我猜是因为它们使用自己的解析器而不是内置的浏览器的...
答案 0 :(得分:2)
您需要转义引号和反斜杠。由于你在带双引号的字符串周围使用单引号,你只需要转义反斜杠:
JSON.parse('{"arg1":"some string \\"with quotes\\""}');