Fügen Sie dem JSON-Objekt mithilfe von JavaScript ein neues Attribut (Element) hinzu

439

Wie füge ich dem JSON-Objekt mithilfe von JavaScript ein neues Attribut (Element) hinzu?

bläulich
quelle

Antworten:

628

JSON steht für JavaScript Object Notation. Ein JSON-Objekt ist wirklich eine Zeichenfolge, die noch nicht in das Objekt umgewandelt wurde, das es darstellt.

Um einem vorhandenen Objekt in JS eine Eigenschaft hinzuzufügen, haben Sie folgende Möglichkeiten.

object["property"] = value;

oder

object.property = value;

Wenn Sie zusätzliche Informationen bereitstellen, z. B. genau das, was Sie im Kontext tun müssen, erhalten Sie möglicherweise eine individuellere Antwort.

Quintin Robinson
quelle
6
@shanehoban hier aist JSON, a.swie gerade von Ihnen definiert, ist eine Zeichenfolge. Jetzt versuchen Sie ["subproperty"], eine Zeichenfolge hinzuzufügen . Verstehst du jetzt, warum du den Fehler bekommen hast?
Shivam
1
Denken Sie für Anfänger daran, dass ein JSON- "Objekt", wie Quintin sagt, überhaupt kein Objekt ist, sondern nur eine Zeichenfolge. Sie müssten es mit JSON.parse () in ein tatsächliches Javascript-Objekt konvertieren, bevor Sie sein Beispiel vonobject["property"] = value;
SpaceNinja
2
@shanehoban Überprüfen Sie meine Antwort oben und Sie werden sehen, wie Sie mehrere Attribute gleichzeitig hinzufügen können.
Victor Augusto
1
@EduardoLucio Das liegt daran, dass Sie verwenden sollten JSON.stringify.
Solomon Ucko
1
@EduardoLucio Das Problem ist, dass console.loges nicht für die Serialisierung vorgesehen ist. Verwenden Sie 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
quelle
6
Genau das, wonach ich gesucht habe, ein Element hinzuzufügen, wenn der Name programmgesteuert konstruiert werden muss
Quilkin
4
tolles Beispiel. Das hilft mir.
Ricky
152

Ein JSON-Objekt ist einfach ein Javascript-Objekt. Da Javascript eine prototypbasierte Sprache ist, müssen Sie es nur mit der Punktnotation adressieren.

mything.NewField = 'foo';
FlySwat
quelle
Das ist es, ich liebe Javascript Protoype!
Caglaror
70

danke für diesen Beitrag. Ich möchte etwas hinzufügen, das nützlich sein kann.

Für IE ist es gut zu verwenden

object["property"] = value;

Syntax, da einige spezielle Wörter im IE einen Fehler verursachen können.

Ein Beispiel:

object.class = 'value';

Dies schlägt im IE fehl, da " Klasse " ein spezielles Wort ist. Ich habe mehrere Stunden damit verbracht.

Löwe
quelle
@Sunil Garg Wie würden Sie diesen Wert als Kind für ein Elternteil im Originalobjekt speichern?
Jamie Corkhill
42

Mit ECMAScript seit 2015 können Sie die Spread-Syntax verwenden (… drei Punkte):

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

Hier können Sie Unterobjekte hinzufügen:

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

das Ergebnis wäre:

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

Sie können auch Objekte zusammenführen:

var mergedObj = { ...obj1, ...obj2 };
Cassio Seffrin
quelle
13

Sie können auch Object.assignvon verwenden ECMAScript 2015. Außerdem können Sie verschachtelte Attribute gleichzeitig hinzufügen. Z.B:

const myObject = {};

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

Ps: Dadurch wird das vorhandene Objekt mit den zugewiesenen Attributen nicht überschrieben. Stattdessen werden sie hinzugefügt. Wenn Sie jedoch einem vorhandenen Attribut einen Wert zuweisen, wird dieser überschrieben.

Victor Augusto
quelle
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;
}

Erweitert mehrere JSON-Objekte (ignoriert Funktionen):

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

Wird zu einem einzelnen JSON-Objekt führen

Ivan
quelle
2

Sie können Ihrem JSON auch neue JSON-Objekte hinzufügen, indem Sie die Erweiterungsfunktion verwenden.

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

Eine sehr gute Option für die Erweiterungsfunktion ist die rekursive Zusammenführung. Fügen Sie einfach den wahren Wert als ersten Parameter hinzu (weitere Optionen finden Sie in der Dokumentation). Beispiel,

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
quelle
2

Sie können Attribute mit Variablen auch dynamisch direkt in einem Objektliteral hinzufügen.

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

Ergebnisse in:

{
    amount: 1, 
    amount__more: 2
}
Stefan Rein
quelle
0

Verwendung $.extend()von jquery wie folgt :

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

Ich hoffe du dienst ihnen.

Giovanny Gonzalez
quelle