JSON stringifica array di oggetti con proprietà
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
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"]}"
Puoi mettere l'extra: [...] dentro {} che cosa farà nell'oggetto. Quindi puoi stringerlo.
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"}]
{...} 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.