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.
[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.)
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 property
keys
, retourne un Array
de clés à partir de cette Object
Chrome, FF et Safari prennent en charge Object.keys
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]);
}
}
}
}