2012-03-15 17 views
5

Aquí está mi código de respuesta en jQuery:Cómo analizar datos JSON cuando el nombre de la propiedad no se conoce de antemano?

var response = $.parseJSON(response); 

for (var i = 0; i < response.groupIds.length; i++) { 
    console.log(response.groupIds[i], i); 
} 

Cada response.groupIds[i] es de la forma {"unknown name":"unknown value"}.

Deseo acceder a estos dos bits de datos en javascript, ¿cómo puedo lograr esto cuando no sé de antemano lo que p. unknown name es?

Respuesta

12

Utilice Object.keys para obtener una lista completa (matriz) de los nombres de las teclas. Un polyfill está disponible here.

var group = response.groupIds[i]; 

var allPropertyNames = Object.keys(group); 
for (var j=0; j<allPropertyNames.length; j++) { 
    var name = allPropertyNames[j]; 
    var value = group[name]; 
    // Do something 
} 

El formato de respuesta de su pregunta contiene solo un par de clave-valor. Después, el código se puede reducir a:

var group = response.groupIds[i]; 
var name = Object.keys(group)[0]; // Get the first item of the list; = key name 
var value = group[name]; 

Si no está interesado en la lista, utilice un bucle for-i-inconhasOwnProperty. El último método tiene que usarse para excluir propiedades heredadas del prototipo.

for (var name in group) { 
    if (group.hasOwnProperty(name)) { 
     var value = group[name]; 
     // Do something 
    } 
} 
+0

Gracias Rob, pero ¿qué es Object en mi código anterior? ¿Respuesta? –

+0

Ah lo entiendo, gracias. –

3

utilizar un bucle for..in:

for(x in response.groupIds[i]) { 
    // x is now your unknown key 
    // response.groupIds[i][x] is the unknown value 
} 

Dado que sólo hay una propiedad del objeto, que se va a trabajar muy bien.

+0

Cuando intento esto, ¿dice que no estoy definido? –

+0

¿No lo definiste en tu primer bucle 'for'? –

Cuestiones relacionadas