让我们说我有一个相当简单的方法,如下所示:
var foo = function (str) {
console.log(str); //{"Field Name": "Value With "Escaped" Content"}
JSON.parse(str); //fails
}
foo('{"Field Name": "Value With \"Escaped\" Content"}');
传递的参数具有有意的反斜杠(字符串来自第三方),但是,一旦将字符串传递给函数,它们就会缺失(请参阅内联注释)。
如果不手动双重转义字符串,我可以避免此问题吗?为什么不在字符串周围使用单斜线避免这个问题?是否可以检索原始输入字符串?
答案 0 :(得分:2)
\
个字符是JSON转义字符,但它们也是JavaScript转义字符。
您有一个JavaScript字符串文字。当JavaScript编译器对其进行解析时,\"
将被解释为"
。
JSON解析器因此被传递"
而不是\"
。
如果不手动双重转义字符串,我可以避免此问题吗?
字符串需要双重转义。您可能需要或不必手动执行此操作,具体取决于字符串的来源。
为什么不在字符串周围使用单斜线避免此问题?
因为JavaScript的语言设计并未说明\
字符不是单引号字符串中的转义字符。