Ajouter un nouvel attribut (élément) à l'objet JSON à l'aide de JavaScript


439

Comment ajouter un nouvel attribut (élément) à un objet JSON en utilisant JavaScript?

Réponses:


628

JSON signifie JavaScript Object Notation. Un objet JSON est vraiment une chaîne qui n'a pas encore été transformée en l'objet qu'il représente.

Pour ajouter une propriété à un objet existant dans JS, vous pouvez procéder comme suit.

object["property"] = value;

ou

object.property = value;

Si vous fournissez des informations supplémentaires comme exactement ce que vous devez faire dans le contexte, vous obtiendrez peut-être une réponse plus personnalisée.


6
@shanehoban ici aest JSON, a.scomme vous venez de le définir est une chaîne. Maintenant, vous essayez d'ajouter ["subproperty"]à une chaîne. Comprenez-vous maintenant pourquoi vous avez l'erreur?
shivam

1
Pour les débutants, rappelez-vous que comme le dit Quintin, un "objet" JSON n'est pas du tout un objet, c'est juste une chaîne. Vous devrez le convertir en un véritable objet Javascript avec JSON.parse () avant d'utiliser son exemple deobject["property"] = value;
SpaceNinja

2
@shanehoban vérifiez ma réponse en haut et vous verrez comment vous pouvez ajouter plusieurs attributs à la fois.
Victor Augusto

1
@EduardoLucio C'est parce que vous devriez utiliser JSON.stringify.
Solomon Ucko

1
@EduardoLucio Le problème n'est console.logpas destiné à la sérialisation. Utilisez console.log(JSON. stringify(object)).
Solomon Ucko

182
var jsonObj = {
    members: 
           {
            host: "hostName",
            viewers: 
            {
                user1: "value1",
                user2: "value2",
                user3: "value3"
            }
        }
}

var i;

for(i=4; i<=8; i++){
    var newUser = "user" + i;
    var newValue = "value" + i;
    jsonObj.members.viewers[newUser] = newValue ;

}

console.log(jsonObj);

6
Exactement ce que je cherchais, ajouter un élément lorsque le nom doit être construit par programmation
quilkin

4
excellent exemple. Cela m'aide.
Ricky

152

Un objet JSON est simplement un objet javascript, donc avec Javascript étant un langage basé sur un prototype, tout ce que vous avez à faire est de l'adresser en utilisant la notation par points.

mything.NewField = 'foo';

Ça y est, j'adore le protoype javascript!
caglaror

70

merci pour ce post. Je veux ajouter quelque chose qui peut être utile.

Pour IE, il est bon d'utiliser

object["property"] = value;

syntaxe car certains mots spéciaux dans IE peuvent vous donner une erreur.

Un exemple:

object.class = 'value';

cela échoue dans IE, car " classe " est un mot spécial. J'ai passé plusieurs heures avec ça.


@Sunil Garg Comment stockeriez-vous cette valeur en tant qu'enfant à un parent dans l'objet d'origine?
Jamie Corkhill

42

Avec ECMAScript depuis 2015, vous pouvez utiliser Spread Syntax (… trois points):

let  people = { id: 4 ,firstName: 'John'};
people = { ...people, secondName: 'Fogerty'};

Il vous permet d'ajouter des sous-objets:

people = { ...people, city: { state: 'California' }};

le résultat serait:

{  
   "id": 4,
   "firstName": "John",
   "secondName": "Forget",
   "city": {  
      "state": "California"
   }
}

Vous pouvez également fusionner des objets:

var mergedObj = { ...obj1, ...obj2 };

13

Vous pouvez également utiliser à Object.assignpartir de ECMAScript 2015. Il vous permet également d'ajouter des attributs imbriqués à la fois. Par exemple:

const myObject = {};

Object.assign(myObject, {
    firstNewAttribute: {
        nestedAttribute: 'woohoo!'
    }
});

Ps: cela ne remplacera pas l'objet existant avec les attributs attribués. Au lieu de cela, ils seront ajoutés. Cependant, si vous affectez une valeur à un attribut existant, elle sera remplacée.


7
extend: function(){
    if(arguments.length === 0){ return; }
    var x = arguments.length === 1 ? this : arguments[0];
    var y;

    for(var i = 1, len = arguments.length; i < len; i++) {
        y = arguments[i];
        for(var key in y){
            if(!(y[key] instanceof Function)){
                x[key] = y[key];
            }
        }           
    };

    return x;
}

Étend plusieurs objets json (ignore les fonctions):

extend({obj: 'hej'}, {obj2: 'helo'}, {obj3: {objinside: 'yes'}});

Se traduira par un seul objet json


2

Vous pouvez également ajouter de nouveaux objets json dans votre json, en utilisant la fonction d' extension ,

var newJson = $.extend({}, {my:"json"}, {other:"json"});
// result -> {my: "json", other: "json"}

Une très bonne option pour la fonction d'extension est la fusion récursive. Ajoutez simplement la vraie valeur comme premier paramètre (lisez la documentation pour plus d'options). Exemple,

var newJson = $.extend(true, {}, {
    my:"json",
    nestedJson: {a1:1, a2:2}
}, {
    other:"json",
    nestedJson: {b1:1, b2:2}
});
// result -> {my: "json", other: "json", nestedJson: {a1:1, a2:2, b1:1, b2:2}}

2

Vous pouvez également ajouter dynamiquement des attributs avec des variables directement dans un littéral d'objet.

const amountAttribute = 'amount';
const foo = {
                [amountAttribute]: 1
            };
foo[amountAttribute + "__more"] = 2;

Résulte en:

{
    amount: 1, 
    amount__more: 2
}

0

Les usages $.extend() de jquery , comme ceci:

token = {_token:window.Laravel.csrfToken};
data = {v1:'asdass',v2:'sdfsdf'}
dat = $.extend(token,data); 

J'espère que vous les servez.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.