【问题标题】:Label with double quotes produces error "Invalid Label" in browser带双引号的标签在浏览器中产生错误“无效标签”
【发布时间】:2011-11-29 17:35:51
【问题描述】:

我的浏览器开始出现错误,解析来自服务器的 JSON 返回数据。起初我认为这是我的数据特有的东西,但即使是像这样的愚蠢的东西

{"a": 1}

在 Firefox 中导致错误“无效标签”,在 Chrome 中导致错误“SyntaxError: Unexpected token :”。当它更改为

{a:1}

(即删除标签周围的双引号)它工作正常。但是,我确信即使使用双引号,它也是有效的 JSON(JSONLint 同意这一点)。

我看到的解决方法是用括号括住 JSON 对象,如下所示:

({"a":1})

这在浏览器控制台中有效,但是当我更改服务器数据(响应 JSONP 调用)并且我也无法在浏览器中更改它时,因为我使用的是库(Dojo)和我没有机会在解析之前拦截返回数据。

更新

我在我的服务器代码中发现了一个错误,我没有将数据包装在 JS 函数中以用于 JSONP 响应。这已经解决了这个问题,我随后需要删除这个问题。抱歉,并感谢您的回复。

【问题讨论】:

  • 更糟糕的是,我确信这在以前有效,但我无法解释如何或为什么。
  • 请说明您是如何解析 JSON 的。双引号对于有效的 JSON 键名是必需的,但我认为问题在于您正在执行 JSONP 调用,因此客户端代码期望看到它可以执行的一些 JS。它将 { 视为代码块的开头,而不是对象文字的开头,因此当它看到冒号时,它认为它之前的事物是标签(例如您可以与 continue 或 break 语句一起使用) .把整个东西放在括号中意味着它被解释为一个表达式。 JSONP 和 JSON 的工作方式不同。
  • 我很抱歉,但我发现我的服务器代码中有一个错误,即数据没有按应有的方式包装在 JSONP 响应的函数调用中。因此,我将删除这个问题。尽管如此,还是感谢您的时间、精力和解释。

标签: javascript json


【解决方案1】:
{"a": 1}

独站不是json,是block

"a": 将是一个跳转 label 继续。而且这样的标签写的时候没有"

({"a":1}) 是一个表达式。因此{"a": 1} 将被解析为 json。

【讨论】:

  • 我是否错误地使用了“标签”一词? “关键”是正确的术语吗?
  • @mydoghasworms 抱歉,无法理解您的意思?
  • 在示例 {a:1} 中,a 是称为“键”还是“标签”?
  • 如果写成:{a:1},则称为label。如果写成:({a:1})(因此,用作表达式)它是property name
  • 这是一个“标签”,因为整个事物没有被视为对象文字的表达式,而是被解释为一个块(如 if 或 for 没有“if”或“for”关键字)。也就是说,术语“标签”与对象无关。如果它是一个对象字面量,它将是一个“属性名称”,或者更通俗地说,是“键”。
猜你喜欢
  • 2019-08-30
  • 2015-06-17
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
相关资源
最近更新 更多