Javascript: Получение всех существующих ключей в массиве JSON

У меня есть массив JSON, как показано ниже:

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

Я не знаю, какие ключи существуют в этом массиве. Я хочу получить весь существующий ключ из массива.

Должно быть возможно что-то вроде этого:

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

Скажите, пожалуйста, способ или способ получить все ключи, существующие в массиве Json.

Привет

Ответы

Ответ 1

Попробуйте следующее:

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

Я также внесли некоторые изменения в ваш текущий код (например, кэширование length).

Ответ 2

Почему вы не используете

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

вместо

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

? Тогда решение было бы так просто: Object.keys(jsonObject).

Ответ 3

Пройдите через свойства объекта и выберите первый "реальный" (который дает вашу схему данных только реальную).

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

См. Как перебрать элементы в объекте js? для объяснения того, почему важно использовать hasOwnProperty здесь.

Ответ 4

Попробуйте следующее:

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

Это также должно работать для нескольких ключей в объектах массива.

Если вы поддерживаете старые браузеры, которые не имеют сокращения и карты, рассмотрите возможность использования shim.

Ответ 5

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