Получить ключи json-объекта в JavaScript

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

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

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

Ответ 1

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

Если вы можете полагаться на доступные функции 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 вы не можете использовать именованные функциональные выражения [ну, не без особой осторожности]. Таким образом, функция самоисполнения позволяет избежать объявления функции создайте глобальный символ.)

Ответ 2

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

ИЗМЕНИТЬ

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

Object имеет property keys, возвращает Array ключей из этого Object

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

Ответ 3

Рабочий код здесь http://jsfiddle.net/gbsandeep/2TmaG/

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