JSON stringify matriz de objetos con propiedad

Oct 11 2020

Estaba tratando de secuenciar una matriz de objetos con propiedades adicionales.

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 qué la propiedad "extra" no está codificada? ¿Cómo puedo conservar la propiedad que falta en JSON.stringify ()?

Respuestas

3 raina77ow Oct 11 2020 at 22:45

Porque datano es solo un objeto, es una matriz. Y cuando las matrices están json-stringificadas, todas las propiedades no numéricas se descartan del resultado (ya que de [...]todos modos no hay forma de representarlas en notación).

Si aún desea ver esa propiedad en JSON, debe usar Objetos simples. Puede morder la bala y simplemente "objetivar simplemente" la matriz original con { ... }azú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"]}"

... pero cuidado, todos esos accesorios "0", "1" se verán dentro de su JSON tal cual, y esa no es la mejor vista. Por lo general, es más limpio usar una propiedad 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"]}"
TomerLevitski Oct 11 2020 at 22:46

Puede poner el extra: [...] dentro de {} que hará en objeto. Entonces puedes encadenarlo.

hosseinsedighian Oct 11 2020 at 22:48

tu json es Array pero les pones una clave

si desea usarlo con una palabra clave, debe 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"}]

MatteoDalGrande Oct 11 2020 at 22:54

{...} se usa para definir un solo objeto, mientras que el otro [...] es una matriz y se usa para definir una secuencia de objetos, valores o listas ...

los objetos se definen como {clave: objeto o lista o valor, ...} la lista no es más que una secuencia de objetos o listas o valores, [objetos o lista o valores, ...] ...

intente usar un solo objeto y no una matriz.