JSON stringifica array di oggetti con proprietà

Oct 11 2020

Stavo cercando di stringere una serie di oggetti con proprietà extra.

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"}]

D : Perché la proprietà "extra" non è vincolata? Come posso preservare la proprietà mancante in JSON.stringify ()?

Risposte

3 raina77ow Oct 11 2020 at 22:45

Perché datanon è solo un oggetto, è un array. E quando gli array sono json-stringificati, tutte le proprietà non numeriche vengono scartate dal risultato (poiché non c'è modo di rappresentarle [...]comunque nella notazione).

Se vuoi ancora vedere quella proprietà in JSON, devi usare oggetti semplici. Puoi mordere il proiettile e semplicemente "oggettivare" l'array originale con lo { ... }zucchero:

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"]}"

... ma attenzione, tutti quegli oggetti di scena "0", "1" verranno visualizzati nel tuo JSON così com'è, e non è la migliore delle visualizzazioni. Di solito è più pulito solo per utilizzare proprietà aggiuntive:

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"]}"
TomerLevitski Oct 11 2020 at 22:46

Puoi mettere l'extra: [...] dentro {} che cosa farà nell'oggetto. Quindi puoi stringerlo.

hosseinsedighian Oct 11 2020 at 22:48

il tuo json è Array ma gli metti una chiave

se vuoi usarlo con la parola chiave dovresti usare:

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"}]

MatteoDalGrande Oct 11 2020 at 22:54

{...} viene utilizzato per definire un singolo oggetto, mentre l'altro [...] è un array e viene utilizzato per definire una sequenza di oggetti, valori o elenchi ...

gli oggetti sono definiti come tali {chiave: oggetto o elenco o valore, ...} elenco non è altro che una sequenza di oggetti o elenchi o valori, [oggetti o elenco o valori, ...] ...

prova a usare un singolo oggetto e non un array.