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