получить ключи json-объекта в JavaScript [дубликат]


этот вопрос уже есть ответ здесь:

У меня есть JSON-объект в JavaScript, и я хочу получить ключи, используемые в нем. Мой JavaScript-код выглядит так:

var jsonData = [{"person":"me","age":"30"},{"person":"you","age":"25"}];

и я хочу цикл, который предупреждает меня "человек" и "возраст", которые являются ключами первый объект в JSON-массив.

3 72

3 ответа:

[то, что у вас есть, это просто объект, а не "json-объект". JSON - это текстовая нотация. То, что вы процитировали, - это код JavaScript с использованием инициализатор массива и объект инициализатор (aka, "синтаксис объектного литерала").]

если вы можете положиться на наличие функций ECMAScript5, вы можете использовать Object.keys функция для получения массива ключей (имен свойств) в объекте. Обратите внимание, что старые браузеры не будут иметь его. Если нет, это один из тех, которые вы можете предоставить себе:

if (typeof Object.keys !== "function") {
    (function() {
        var hasOwn = Object.prototype.hasOwnProperty;
        Object.keys = Object_keys;
        function Object_keys(obj) {
            var keys = [], name;
            for (name in obj) {
                if (hasOwn.call(obj, name)) {
                    keys.push(name);
                }
            }
            return keys;
        }
    })();
}

использует for..in цикл (подробнее здесь) для перебора всех имен свойств, которые имеет объект, и использует Object.prototype.hasOwnProperty чтобы проверить, что свойство принадлежит непосредственно объекту, а не наследуется.

(Я мог бы сделать это без самоисполняющейся функции, но я предпочитаю свои функции имена, и быть совместимым с IE ты не может использовать именованные выражения функций [ну, не без большой помощи]. Таким образом, самоисполняющаяся функция существует, чтобы избежать того, чтобы объявление функции создавало глобальный символ.)

var jsonData = [{"person":"me","age":"30"},{"person":"you","age":"25"}];

for(var i in jsonData){
    var key = i;
    var val = jsonData[i];
    for(var j in val){
        var sub_key = j;
        var sub_val = val[j];
        console.log(sub_key);
    }
}

EDIT

var jsonObj = {"person":"me","age":"30"};
Object.keys(jsonObj);  // returns ["person", "age"]

Object есть propertykeys возвращает Array ключи от Object

Chrome, FF & Safari поддерживает Object.keys

работающий код

var jsonData = [{person:"me", age :"30"},{person:"you",age:"25"}];

for(var obj in jsonData){
    if(jsonData.hasOwnProperty(obj)){
    for(var prop in jsonData[obj]){
        if(jsonData[obj].hasOwnProperty(prop)){
           alert(prop + ':' + jsonData[obj][prop]);
        }
    }
}
}