JSON-String-Array von Objekten mit Eigenschaft
Ich habe versucht, ein Array von Objekten mit zusätzlichen Eigenschaften zu kennzeichnen.
var data = [{foo: "1", bar: "2"}, {foo: "2", bar:"3"}];
data.extra = ["a", "b"];
console.log(data)
// [{foo: "1", bar: "2"}, {foo: "2", bar:"3"}, extra: ["a", "b"]]
console.log(JSON.stringify(data));
//[{foo: "1", bar: "2"}, {foo: "2", bar:"3"}]
F : Warum ist die Eigenschaft "extra" nicht stringifiziert? Wie kann ich die fehlende Eigenschaft in JSON.stringify () beibehalten?
Antworten
Weil dataes nicht nur ein Objekt ist, sondern ein Array. Und wenn Arrays json-stringifiziert sind, werden alle nicht numerischen Eigenschaften aus dem Ergebnis entfernt (da es [...]sowieso keine Möglichkeit gibt, sie in Notation darzustellen ).
Wenn Sie diese Eigenschaft weiterhin in JSON anzeigen möchten, müssen Sie einfache Objekte verwenden. Sie können die Kugel beißen und das ursprüngliche Array einfach mit { ... }Zucker "objektivieren" :
const data = [{foo: "1", bar: "2"}, {foo: "2", bar:"3"}];
data.extra = ["a", "b"];
JSON.stringify( {...data} );
// "{"0":{"foo":"1","bar":"2"},"1":{"foo":"2","bar":"3"},"extra":["a","b"]}"
... aber Vorsicht, all diese "0", "1" Requisiten werden so wie sie sind in Ihrem JSON angezeigt, und das ist nicht die beste Ansicht. Es ist normalerweise sauberer, nur um zusätzliche Eigenschaften zu nutzen:
const data = [{foo: "1", bar: "2"}, {foo: "2", bar:"3"}];
const extra = ["a", "b"];
const output = {
data,
extra
};
JSON.stringify(output);
// "{"data":[{"foo":"1","bar":"2"},{"foo":"2","bar":"3"}],"extra":["a","b"]}"
Sie können das Extra einfügen: [...] in {}, das im Objekt erstellt wird. Dann können Sie es stringifizieren.
Ihr json ist Array, aber Sie geben ihnen einen Schlüssel
Wenn Sie es mit einem Schlüsselwort verwenden möchten, sollten Sie Folgendes verwenden:
var data = [{foo: "1", bar: "2"}, {foo: "2", bar:"3"}];
data.push(["a", "b"]) ;
console.log(data)
// [{foo: "1", bar: "2"}, {foo: "2", bar:"3"}, extra: ["a", "b"]]
console.log(JSON.stringify(data));
//[{foo: "1", bar: "2"}, {foo: "2", bar:"3"}]
{...} wird verwendet, um ein einzelnes Objekt zu definieren, während das andere [...] Array ist und verwendet wird, um eine Folge von Objekten, Werten oder Listen zu definieren ...
Objekte werden als solche definiert. {Schlüssel: Objekt oder Liste oder Wert, ...} Liste ist nichts weiter als eine Folge von Objekten oder Listen oder Werten, [Objekte oder Liste oder Werte, ...] ...
Versuchen Sie, ein einzelnes Objekt und kein Array zu verwenden.