JSON stringify tableau d'objets avec propriété
J'essayais de stringifier un tableau d'objets avec des propriétés supplémentaires.
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"}]
Q : Pourquoi la propriété "extra" n'est-elle pas stringifiée? Comment puis-je conserver la propriété manquante dans JSON.stringify ()?
Réponses
Parce que ce datan'est pas seulement un objet - c'est un tableau. Et lorsque les tableaux sont stringifiés json, toutes les propriétés non numériques sont supprimées du résultat (car il n'y a aucun moyen de les représenter en [...]notation de toute façon).
Si vous souhaitez toujours voir cette propriété dans JSON, vous devez utiliser des objets simples. Vous pouvez mordre la balle et simplement "objectiver" le tableau original avec du { ... }sucre:
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"]}"
... mais attention, tous ces accessoires "0", "1" seront vus dans votre JSON tels quels, et ce n'est pas la meilleure vue. Il est généralement plus propre d'utiliser des propriétés supplémentaires:
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"]}"
Vous pouvez mettre le supplément: [...] à l'intérieur de {} ce qui fera at in object. Ensuite, vous pouvez le stringifier.
votre json est Array mais vous leur mettez une clé
si vous souhaitez l'utiliser avec un mot-clé, vous devez utiliser:
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"}]
{...} est utilisé pour définir un seul objet, tandis que l'autre [...] est un tableau et est utilisé pour définir une séquence d'objets, de valeurs ou de listes ...
les objets sont définis comme tels {clé: objet ou liste ou valeur, ...} liste n'est rien de plus qu'une séquence d'objets ou de listes ou de valeurs, [objets ou liste ou valeurs, ...] ...
essayez d'utiliser un seul objet et non un tableau.