Javascript 为什么这个JSON字符串无法解析?

Javascript 为什么这个JSON字符串无法解析?,javascript,jquery,json,Javascript,Jquery,Json,也许我现在看不到,但是为什么这个JSON字符串无法解析呢?它应该是有效的 var content = $.parseJSON('{"foobar" : "hallo\"tow"}'); 工作示例:因为要以字符串文本创建JSON,所以需要转义\本身: 说明: 在JSON中,使用\字符对字符进行转义。这使得以下JSON完全有效: {"foobar" : "hallo\"tow"} 现在,在您的示例中,您正在JavaScript字符串中构造此JSON值: '{"foobar" : "hallo\"

也许我现在看不到,但是为什么这个JSON字符串无法解析呢?它应该是有效的

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

工作示例:

因为要以字符串文本创建JSON,所以需要转义\本身:

说明:

在JSON中,使用\字符对字符进行转义。这使得以下JSON完全有效:

{"foobar" : "hallo\"tow"}
现在,在您的示例中,您正在JavaScript字符串中构造此JSON值:

'{"foobar" : "hallo\"tow"}'
这引入了一个微妙的问题,因为JavaScript字符串也用\字符转义字符。即,以下字符串文字:

'\"'
'{"foobar" : "hallo\"tow"}'
'{"foobar" : "hallo\\"tow"}'
。。。保存以下值:

"
{"foobar" : "hallo"tow"}
现在,再次将其应用到您的示例中,我们发现以下字符串文字:

'\"'
'{"foobar" : "hallo\"tow"}'
'{"foobar" : "hallo\\"tow"}'
。。。实际持有价值:

"
{"foobar" : "hallo"tow"}
正如你所看到的,我们已经失去了信心。幸运的是,这很容易解决,因为在JavaScript字符串中\characters也可以用\characters转义,这就是我的解决方案所做的。现在,修改后的字符串文字:

'\"'
'{"foobar" : "hallo\"tow"}'
'{"foobar" : "hallo\\"tow"}'
将解析为包含预期值的字符串:

{"foobar" : "hallo\"tow"}
。。。然后可以将其解析为格式正确的JSON


在从textarea读取或作为ajax请求的结果读取时不会出现此问题的原因是JSON值不是由字符串文本定义的。额外的\只是因为字符串文字语法而需要的,而且谁先逃出引号的竞争还在进行中,而不是真正的竞争。。。字符串文字总是赢。

该死,你搞定了!非常感谢jmar:@user2190870没问题,很高兴能帮上忙!:我有点困惑。如果我解析一个json字符串,我用ajax或者从一个文本区域获取它,它实际上总是有效的,但这就是字符串文本的要点,对吗?编辑:将这个注释移到上面。。。现在遇到StackOverflow注释解析问题:好的,为我的答案添加了一个解释。相关:如果您想查看传递给$.parseJSON的实际值,只需在控制台中放置“{foobar:hallo\tow}”,并查看输出。非常感谢Felix,我将尝试!