2010-01-15 69 views
7

如何引用JSON(Javascript)对象的元素。exampe:alert(homes.Agents [1] .name);引用JSON(Javascript)对象的元素

<script> 
    var homes = [ 
{ 
    "Agents" : { 
     "name" : "Bob Barker", 
     "name" : "Mona Mayflower" 
    }, 
    "Listings" : [ 
     { 
      "h_id": "3", 
      "city": "Dallas", 
      "state": "TX", 
      "zip": "75201", 
      "price": "162500" 
     }, 
     { 
      "h_id": "4", 
      "city": "Bevery Hills", 
      "state": "CA", 
      "zip": "90210", 
      "price": "319250" 
     }, 
     { 
      "h_id": "5", 
      "city": "New York", 
      "state": "NY", 
      "zip": "00010", 
      "price": "962500" 
     } 
    ] 
} 

]; 

</script> 

回答

2

你应该给你的对象属性唯一的名称。在你的例子中,第二个名称属性覆盖第一个属性,使得homes [0] .Agents.name永远是“Mona Mayflower”。

一旦你得到的排序,我认为你正在寻找这样的:

homes[0].Agents.name 
5

你的JSON语法是错误的。对象中不能有两次相同的密钥。相反,你需要一个数组:

var homes = { 
    "Agents" : [ 
    { "name" : "Bob Barker" }, 
    { "name" : "Mona Mayflower" } 
    ], 
    ... 
} 

然后你就可以访问代理,像这样:从以下link采取

homes.Agents[1] // => { "name": "Mona Mayflower" } 

// or 

homes.Agents[1].name // => "Mona Mayflower" 
+0

你校访问相关数据是无效的语法,需要有一个映射('{}')来使用任意键。也就是说,它会在'Agents'这一行上失败:['因为你当前正在定义一个数组,而不是映射。 – Crast 2010-01-15 21:37:59

+0

感谢您的纠正,Crast。我更新了我的代码。 – 2010-01-19 15:54:28

0

例子:

var myJSONObject = {"bindings": [ 
     {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}, 
     {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"}, 
     {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"} 
    ] 
}; 

myJSONObject.bindings[0].method” 将返回“ newURI

1

这是无效的JSON代理是只是一个对象,而不是一个数组。如果进行了重组这样的:

"Agents" : [ 
    { "name" : "Bob Barker"}, 
    { "name" : "Mona Mayflower"}] 

那么你可以使用homes.Agents[1].name获得“蒙娜丽莎五月花”

11

这不正是很好的JSON上面有,在案件的代理值的第二密钥将覆盖首先。

你大概的意思是:

"Agents" : [ 
    {"name" : "Bob Barker"}, 
    {"name" : "Mona Mayflower"} 
], 

然后你会为

homes[0]['Agents'][0]['Name'] 

访问第一个代理的名字同样,要获得从清单中的一个值,你会做一些类似于到:

homes[0]['Listings'][0]['city'] 
- or - 
homes[0].Listings[0].city 

只要有一个有效的标识符就可以使用点语法,否则您需要使用数组语法。

作为一个方面说明,我不确定数据的结构,但可能会消除将整个结构封闭在数组中的外层级别[]。那么你不需要像homes[0]['Listings']那样访问所有东西,而只需要homes['Listings']

3

家是一个数组,因此您的第一个访问器是基于索引的。

舍[0]

剂是包含具有相同名称的两个键的对象,和对象。这是一个禁忌。

如果您自行定义了这个数据,你应该改变

"Agents": { 
    "name" : "Bob Barker", 
    "name" : "Mona Mayflower" 
} 

"Agents": [ 
     {"name" : "Bob Barker"}, 
     {"name" : "Mona Mayflower"} 
    ] 

然后,你可以通过

homes[0].Agents[1].name