为什么这个json字符串无法解析

时间:2014-10-08 18:04:21

标签: javascript jquery json

也许我现在只是看不到它,但为什么这个json字符串无法解析? (因为它有效)

var content = $.parseJSON('{"foobar" : "hallo\"tow"}');

http://jsfiddle.net/w6yjpame/2/

感谢您的帮助!

1 个答案:

答案 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值不是由字符串文字定义的。额外的\只是由于字符串文字的语法而需要,并且竞争对手是谁首先要逃避"引用(好吧,不是真正的竞争......字符串文字总是胜利。