2016-07-05 6 views
0

Ich bin neu in Javascript und JSON und herumspielen mit etwas Code. Wie setze ich ein JSON-Objekt gleich einem anderen JSON-Objekt innerhalb der Deklaration des Elternteils

Dies ist das Format meines JSON-Objekt

messageData = { 
    "attachment": { 
     "type": "template", 
     "payload": { 
      "template_type": "generic", 
      elements: [{ 
       title: "titleOne", 
       subtitle: "subtitleOne" 
      }, { 
       title: "titleTwo", 
       subtitle: "subtitleTwo" 
      }] 
     } 
    } 
} 

Statt gehen einzeln in einen jeden Titel und Untertitel-Objekt Elemente Hinzufügen möchte ich mit einer Schleife zu tun und stellen Sie nur ein Objekt gleich einem Array Das enthält viele weitere Titel- und Untertitelobjekte. Also sagen wir, ich habe die Objekttitel:

titles = {} //100 objects with different titles and subtitles. 

Gibt es eine Möglichkeit, diese Logik unten zu implementieren?

messageData = { 
      "attachment": { 
       "type": "template", 
       "payload": { 
        "template_type": "generic", 
        elements = titles 
       } 
      } 
     } 

Korrekte Formatierung alles? Danke für die Hilfe!

+0

Können Sie erklären, wie Ihr 'Titel' Objekt/Array aussieht? Kannst du 'Titeln' nicht einfach 'Elementen' zuordnen? – mjsarfatti

+0

Versuchen Sie, das Array zu kopieren, verwenden Sie aber dieselben '{title, subtitle}' - Objekte? Oder müssen Sie die gesamte Struktur klonen? – nrabinowitz

+0

@mjsarfatti Titel ist ein Array von mehreren Objekten, die Titel- und Untertitelobjekte enthalten. Und ja, genau das habe ich mir gedacht.aber ich bin mir nicht sicher, wie ich es zuweisen soll. Ist es so einfach wie "Elemente" = Titel? – user3776662

Antwort

0

Sie haben eine Variable titles, die eine Array von Objekte ihm zugeordneten. Etwas wie:

var titles = [{...}, {...}, ...]; 

Sie später dieses Array zugewiesen werden soll (zur Zeit auf die Variable titles zugeordnet) zu einer Eigenschaft eines Objekt (in diesem Fall elements):

var messageData = { 
    attachment: { 
     type: "template", 
     payload: { 
      template_type: "generic", 
      elements // <-- here 
     } 
    } 
} 

(Bitte beachten Sie, dass ich doppelte Anführungszeichen aus den Eigenschaftsnamen entfernt habe, sie sind nicht notwendig, da sie eine gültige Notation haben)

Wie Sie vermutet, ist nichts einfacher als das:

var messageData = { 
    attachment: { 
     type: "template", 
     payload: { 
      template_type: "generic", 
      elements: titles 
     } 
    } 
} 

Dies als Antwort genug sein würde, aber wir jetzt wieder einen kleinen Schritt machen: in javascript so ziemlich alles ist ein Objekt (ich bin hier ein wenig vereinfachend, Strings sind keine Objekte zum Beispiel, aber ich lade Sie ein, mehr selbst herauszufinden). Aber so verwirrend es auf den ersten Blick klingt, ein Array ist ein Objekt.

Eine andere Sache, die zu wissen ist, dass in Javascript-Objekten als Referenz zugewiesen werden. Wenn Sie also das ursprüngliche Array titles ändern, wird auch das Array elements geändert. Sie sind nur zwei Namen, die auf das gleiche Objekt zeigen.

In Ihrem speziellen Fall dieses Detail vielleicht keine Rolle, aber wenn man das Leben von titles und elements Sie müssen Klon das ursprüngliche Array trennen wollen, bevor Sie es wieder zuordnen. Und der schnellste Weg besteht darin, eine JSON-Konvertierung zu durchlaufen:

var titles_0 = JSON.parse(JSON.stringify(titles)); 
var messageData = { 
    attachment: { 
     type: "template", 
     payload: { 
      template_type: "generic", 
      elements: titles_0 
     } 
    } 
} 
+0

Vielen Dank für die ausführliche Antwort! – user3776662

+0

Kein Problem, Sie können es akzeptiert akzeptieren, wenn Sie es hilfreich fanden :) – mjsarfatti

Verwandte Themen