【问题标题】:Why can't commas be in Javascript object keys?为什么逗号不能在 Javascript 对象键中?
【发布时间】:2016-04-15 08:58:34
【问题描述】:

我知道这是一个奇怪的问题,但我是一个非常新手,似乎无法解决这个问题。我有一个通过 firebase 发送给我的 Javascript 对象,如下所示:

var blob = {
    matt@email,com: {         //notice the comma because periods are illegal in keys
       email: "matt@email.com" //actual email with period
       name: "Matt Sanford"
       pic: "https://lh3.googleusercontent.com/-LeQrq-_KjJE/AAAAAAAAAAI/AAAAAAAAAoI/4l6r2HNdock/photo.jpg"
       provider: "google"
       uid: "0000000000000000"
      }
   }  
} 

我正在尝试通过控制台访问最里面的树,如下所示:console.log(blob.matt@email,com) //throws an error because of an invalid token 即使它应该返回带有emailname 等的对象。

但是当我尝试相同的结构时:

var blob = {foo: {bar: true} }
console.log(blob.foo) //output '{bar: true}'

我想知道两件事,是因为逗号而使修改后的电子邮件的初始密钥是非法的,还是没有办法在 javascript 中读取这样的密钥?建议受到赞赏,因为我只是在这里学习。

更新

我将如何动态访问密钥?显然,动态输入每个键是不可能的。如果不知道键名到底是什么,我将如何阅读它?

【问题讨论】:

  • 两件事,1.当对象的key包含特殊符号时,使用引号 2使用逗号作为对象的两个元素之间的分隔符
  • console.log( blob['matt@email,com'] )

标签: javascript angularjs json firebase


【解决方案1】:

您发布的不是 json 对象,而是 javascript 对象。 JSON 会引用它的所有键。

绝对允许使用逗号,但不能像这样使用标准 obj.property 语法:

console.log(blob.matt@email,com)

你必须这样做:

console.log(blob['matt@email,com']);

【讨论】:

  • 那么 Firebase 发回给我的是一个 javascript 对象?不是json?
  • 如果 firebase 向您发送包含 var 的内容,并且它的结构与您发布的完全相同,那么是的......它不会向您发送 json。但是,我不认为您复制粘贴了 firebase 发回的内容,因为示例中也存在语法错误。这告诉我您可能手动重新输入错误。
  • 在 JSON 中没有var,没有 cmets,每个属性和字符串值都必须用双引号括起来。
  • 他们发送给我的内容放在我的回调函数中的 dataSnapshot 中,我从那里分配 var blob = dataSnapshot.val() 。为了隐私,我输入并省略了一些内容
  • @MattSanford:Firebase 的 DataSnapshot.val() 将为快照中的 JSON 返回一个 JavaScript 对象。如果你想让它再次变成 JSON,JSON.stringify(blob).
猜你喜欢
  • 1970-01-01
  • 2021-11-29
  • 2015-04-03
  • 2016-07-06
  • 1970-01-01
  • 2011-07-17
  • 2019-04-13
  • 1970-01-01
  • 2012-05-28
相关资源
最近更新 更多