JSON stringify array de objetos com propriedade
Eu estava tentando restringir uma série de objetos com propriedades extras.
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"}]
P : Por que a propriedade "extra" não é sequenciada? Como posso preservar a propriedade ausente em JSON.stringify ()?
Respostas
Porque datanão é apenas um objeto - é um array. E quando os Arrays são stringificados em JSON, todas as propriedades não numéricas são descartadas do resultado (já que não há como representá-los em [...]notação de qualquer maneira).
Se você ainda deseja ver essa propriedade em JSON, você deve usar objetos simples. Você pode morder a bala e apenas "objetivar" a matriz original com { ... }açúcar:
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"]}"
... mas cuidado, todos aqueles adereços "0", "1" serão vistos dentro de seu JSON como estão, e essa não é a melhor das visualizações. Geralmente é mais limpo apenas para usar uma propriedade adicional:
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"]}"
Você pode colocar o extra: [...] dentro {} o que fará no objeto. Então você pode restringi-lo.
seu json é Array, mas você colocou uma chave para eles
se quiser usá-lo com palavra-chave, você deve usar:
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"}]
{...} é usado para definir um único objeto, enquanto o outro [...] é uma matriz e é usado para definir uma sequência de objetos, valores ou listas ...
objetos são definidos como {chave: objeto ou lista ou valor, ...} lista ares nada mais do que uma seqüência de objetos ou listas ou valores, [objetos ou lista ou valores, ...] ...
tente usar um único objeto e não uma matriz.