web-dev-qa-db-fra.com

obtenir les clés de json-object en JavaScript

J'ai un objet json en JavaScript et je veux y récupérer les clés utilisées. Mon code JavaScript ressemble à ceci:

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

Et je veux une boucle qui m'alerte "personne" et "âge", qui sont les clés du premier objet du json-Array.

81
user1027167

[Ce que vous avez est juste un objet, pas un "objet json". JSON est une notation textuelle. Ce que vous avez cité est du code JavaScript utilisant un initialiseur de tablea et un initialiseur d'objet (ou "syntaxe d'objet littéral").]

Si vous pouvez compter sur la disponibilité des fonctionnalités ECMAScript5, vous pouvez utiliser la fonction Object.keys pour obtenir un tableau des clés (noms de propriétés) d'un objet. Notez que les anciens navigateurs ne l'auront pas. Sinon, c'est l'un de ceux que vous pouvez vous procurer:

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

Cela utilise une boucle for..in ( plus d'informations ici ) pour parcourir tous les noms de propriété de l'objet et utilise Object.prototype.hasOwnProperty pour vérifier que la propriété appartient directement à l'objet plutôt que d'être héritée.

(J'aurais pu le faire sans la fonction auto-exécutable, mais je préfère mes fonctions à avoir des noms , et pour être compatible avec IE you ne peut pas utiliser expressions de fonction nommées [bien, non sans précaution]. La fonction auto-exécutable est donc là pour éviter que la déclaration de fonction crée un symbole global.)

64
T.J. Crowder
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 a un propertykeys, retourne un Array de clés à partir de cette Object

Chrome, FF et Safari prennent en charge Object.keys

191

Le code de travail

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]);
        }
    }
}
}
17
Sandeep G B