2012-03-19 25 views
15

Tengo una matriz JSON, como a continuación:Javascript: Obtener todas las claves existentes en una matriz JSON

var jsonArray = [{"k1":"v1"},{"k2":"v2"},{"k3":"v3"},{"k4":"v4"},{"k5":"v5"}] 

No sé qué teclas hace que existe en esta matriz. Quiero obtener todas las claves existentes de la matriz.

Debería ser posible algo como esto:

for(i=0;i<jsonArray.lenght;i++){ 
    // something like- key = jsonArray[i].key 
    // alert(key); 
} 

por favor dígame el método o forma de obtener todas las claves existentes en la matriz JSON.

Saludos

+0

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys – georg

Respuesta

9

Prueba esto:

var L = jsonArray.length; 
for (var i = 0; i < L; i++) { 
    var obj = jsonArray[i]; 
    for (var j in obj) { 
     alert(j); 
    } 
} 

También he hecho algunas modificaciones de su código actual (como length almacenamiento en caché).

5

Pasa por las propiedades del objeto y selecciona la primera "real" (que, dado tu esquema de datos, debe ser el real solo real).

var jsonArray = [{"k1":"v1"},{"k2":"v2"},{"k3":"v3"},{"k4":"v4"},{"k5":"v5"}] 

for (var i = 0; i < jsonArray.length; i++) { 
    for (var prop in jsonArray[i]) { 
     if (jsonArray[i].hasOwnProperty(prop)) { 
      var key = prop; 
      break; 
     } 
    } 
    alert(key); 
} 

Ver How to loop through items in a js object? para una explicación de por qué es importante utilizar hasOwnProperty aquí.

3

Prueba esto:

jsonArray.reduce(function(keys, element){ 
    for (key in element) { 
     keys.push(key); 
    } 
    return keys; 
},[]); 

Esto también debería funcionar para varias claves en los objetos de matriz.

Si está admitiendo navegadores antiguos que no tienen reducir y asignar, considere usar un shim.

18

¿Por qué no se utiliza un

var jsonObject = {"k1":"v1","k2":"v2","k3":"v3","k4":"v4","k5":"v5"} 

en lugar de su

var jsonArray = [{"k1":"v1"},{"k2":"v2"},{"k3":"v3"},{"k4":"v4"},{"k5":"v5"}] 

? Entonces la solución sería tan simple: Object.keys(jsonObject).

+0

Cuando intento Object.keys su solución en un jsonObj me sale un mensaje de error TypeError: object.keys () no es una función. – pranshus

+0

'Object' está en mayúscula. Además, la función no está disponible en navegadores obsoletos, tendrá que [shim it there] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys#Compatibility) – Bergi

+0

Gracias. No fue por el caso. Fue porque estaba usando IE 7. – pranshus

1
var id = { "object": "page", "entry": [{ "id": "1588811284674233", "time": 1511177084837, "messaging": [{ "sender": { "id": "1393377930761248" }, "recipient": { "id": "1588811284674233" }, "timestamp": 1511177084553, "message": { "mid": "mid.$cAAX_9pLcfu1mCnGmiVf2Sxd2erI2", "seq": 1882, "text": "a" } }] }] }; 

    function getKey(obj, data) { 
//@author [email protected] 
     var data = data || []; 
     if (obj) { 
     var keys = Object.keys(obj); 
     for (var pos in keys) { 
      console.log(); 
      data.push(keys[pos]); 
      if ((obj[keys[pos]].constructor === Array)) { 
      for (var i = 0; i < obj[keys[pos]].length; i++) { 
       getKey(obj[keys[pos]][i], data); 
      } 
      } 
      else if (obj[keys[pos]].constructor === Object) { 
      getKey(obj[keys[pos]], data); 
      } 
     } 
     return data; 
     } 
    } 
    console.log(getKey(id)); 
Cuestiones relacionadas