【问题标题】:Why does this JSON string fail to parse?为什么这个 JSON 字符串解析失败?
【发布时间】:2014-10-08 18:04:20
【问题描述】:

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

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

工作示例:http://jsfiddle.net/w6yjpame/2/

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

因为您是在字符串文字中创建该 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 值不是由字符串文字定义的。额外的 \ 仅是由于字符串文字语法所必需的,并且竞争正在进行中,谁将首先逃脱 " 引号(嗯,不是真正的竞争......字符串文字总是获胜)。

【讨论】:

  • 该死的你搞定了!非常感谢 jmar :)
  • @user2190870 没问题,很高兴它有帮助! :)
  • 我有点困惑。如果我解析一个 json 字符串,我使用 ajax 或从 textarea 获取它实际上总是可以工作,但这就是字符串文字的重点吗?
  • 编辑:将此评论移到上面...现在遇到 StackOverflow 评论解析问题 :)
  • 好的,在我的回答中添加了解释。
猜你喜欢
  • 2012-06-20
  • 1970-01-01
  • 2014-07-28
  • 2017-02-04
  • 2019-09-06
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多