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?

bleuâtre
la source

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.

Quintin Robinson
la source
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);
Cody
la source
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';
FlySwat
la source
Ç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.

Leo
la source
@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 };
Cassio Seffrin
la source
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.

Victor Augusto
la source
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

Ivan
la source
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}}
George Siggouroglou
la source
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
}
Stefan Rein
la source
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.

Giovanny Gonzalez
la source