7

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

<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> 
4

6 回答 6

14

上面的 JSON 并不是很好,在 Agents 值的情况下,第二个键将覆盖第一个键。

你可能的意思是:

 "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']

于 2010-01-15T21:34:14.700 回答
6

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

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

然后你可以像这样访问代理:

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

// or

homes.Agents[1].name // => "Mona Mayflower"
于 2010-01-15T21:33:25.823 回答
3

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

家[0]

Agents 是一个 Object,而 Object 包含两个同名的键。这是一个禁忌。

如果您自己定义此数据,则应更改

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

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

然后您可以通过以下方式访问相关数据

homes[0].Agents[1].name
于 2010-01-15T21:35:17.280 回答
2

您应该为您的对象属性提供唯一的名称。在您的示例中,第二个 name 属性覆盖了第一个,因此 home[0].Agents.name 将始终为“Mona Mayflower”。

一旦你得到排序,我想你正在寻找这个:

homes[0].Agents.name 
于 2010-01-15T21:33:13.803 回答
1

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

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

然后你可以用homes.Agents[1].name得到'Mona Mayflower'

于 2010-01-15T21:34:14.107 回答
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

于 2010-01-15T21:33:58.233 回答