2010-01-15 19 views
7

¿Cómo me refiero a un elemento del objeto JSON (Javascript)? examen: alerta (homes.Agents [1] .name);se refieren a un elemento del objeto 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> 

Respuesta

2

Debe dar a sus propiedades de objeto nombres únicos. En su ejemplo, la propiedad del segundo nombre sobrescribe la primera para que homes [0] .Agents.name siempre sea "Mona Mayflower".

Una vez que usted consigue que ordenada, pienso que usted está buscando esto:

homes[0].Agents.name 
5

Su sintaxis JSON es erróneo. No puede tener la misma clave dos veces en un objeto. En cambio, necesita una matriz:

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

A continuación, se puede acceder a los agentes de esta manera:

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

// or 

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

Su corrección es una sintaxis no válida , debe haber un mapeo ('{}') para usar claves arbitrarias. A saber, fallaría en la línea '" Agentes ":' 'porque actualmente está definiendo una matriz, no una asignación. – Crast

+0

Gracias por la corrección, Crast. He actualizado mi código. –

0

Ejemplo tomado de la siguiente link:

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" devolverá " newURI "

1

Esto no es válido Agentes JSON es solo un objeto, no una matriz. Si se reestructuró como esto:

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

entonces se podría utilizar homes.Agents[1].name para conseguir 'Mona Mayflower'

11

que no es exactamente muy buena JSON por encima de allí, en el caso de los agentes valoran la segunda clave anulará el primero.

Probablemente significaba:

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

Entonces es posible acceder a nombre del primer agente como

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

Del mismo modo, para obtener uno de los valores de las listas, que haría algo parecido a:

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

la sintaxis con punto se puede utilizar siempre que haya un identificador válido, lo que necesita para utilizar el sintaxis de matriz

Como nota al margen, no estoy seguro de la estructura de los datos, pero es posible que pueda eliminar el nivel externo [] que está encerrando toda su estructura en una matriz. Entonces no necesitaría acceder a todo como homes[0]['Listings'] y en su lugar simplemente homes['Listings'].

3

Homes es una matriz, por lo que su primer acceso está basado en un índice.

hogares [0]

Agentes es un objeto, y el objeto que contiene dos llaves del mismo nombre. Eso es un no-no.

Si está definiendo estos datos usted mismo, debe cambiar

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

a

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

Posteriormente, se podría acceder a los datos en cuestión por

homes[0].Agents[1].name 
Cuestiones relacionadas