也许我现在只是看不到它,但为什么这个json字符串无法解析? (因为它有效)
var content = $.parseJSON('{"foobar" : "hallo\"tow"}');
http://jsfiddle.net/w6yjpame/2/
感谢您的帮助!
答案 0 :(得分:7)
因为您要在字符串文字中创建该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值不是由字符串文字定义的。额外的\
只是由于字符串文字的语法而需要,并且竞争对手是谁首先要逃避"
引用(好吧,不是真正的竞争......字符串文字总是胜利。