2012-03-19 16 views
15

Mam tablicy JSON jak poniżej:Javascript: Getting wszystkie istniejące klucze w tablicy JSON

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

nie wiem, które klawisze nie istnieje w tej tablicy. Chcę pobrać cały istniejący klucz z tablicy.

To powinno być możliwe coś takiego:

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

proszę powiedz mi metodę lub sposób, aby uzyskać wszystkie klucze istniejące w Json tablicy.

Pozdrowienia

+0

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

Odpowiedz

9

Spróbuj tego:

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

Mam również pewne modyfikacje aktualnego kodu (jak length buforowania).

5

Przeprowadź pętlę we właściwościach obiektu i wybierz pierwszy "prawdziwy" (który przy danym schemacie danych powinien być prawdziwy).

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); 
} 

Zobacz How to loop through items in a js object? o wyjaśnienie, dlaczego ważne jest, aby używać hasOwnProperty tutaj.

3

Spróbuj tego:

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

ta powinna także działać na wielu kluczy w obiektach Array.

Jeśli używasz starszych przeglądarek, które nie mają funkcji zmniejszania i mapowania, rozważ skorzystanie z shim.

18

Dlaczego nie używasz

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

zamiast swojego

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

? Wtedy rozwiązanie byłoby tak proste: Object.keys(jsonObject).

+0

Kiedy próbuję swoje rozwiązanie Object.keys na jsonObj otrzymuję TypeError komunikat o błędzie: object.keys () nie jest funtionem. – pranshus

+0

'Obiekt' jest wielkimi literami. Ponadto funkcja nie jest dostępna w przestarzałych przeglądarkach, musisz ją tam przesłać (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys#Compatibility) – Bergi

+0

Dzięki. Nie było to spowodowane sprawą. To dlatego, że używałem 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)); 
Powiązane problemy