JSON stringify tablica obiektów z właściwością

Oct 11 2020

Próbowałem zdefiniować tablicę obiektów z dodatkowymi właściwościami.

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 : Dlaczego właściwość „extra” nie jest ograniczona? Jak mogę zachować brakującą właściwość w JSON.stringify ()?

Odpowiedzi

3 raina77ow Oct 11 2020 at 22:45

Ponieważ datato nie tylko obiekt - to tablica. A gdy tablice są poddawane ciągom json, wszystkie właściwości nieliczbowe są usuwane z wyniku (ponieważ i tak nie ma sposobu, aby przedstawić je w [...]notacji).

Jeśli nadal chcesz widzieć tę właściwość w formacie JSON, musisz użyć zwykłych obiektów. Możesz ugryźć punktor i po prostu „zobiektywizować” oryginalną tablicę za pomocą { ... }cukru:

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

... ale uważaj, wszystkie te rekwizyty „0”, „1” będą widoczne w Twoim JSON bez zmian, a to nie jest najlepszy widok. Zwykle czystsze jest użycie dodatkowej właściwości:

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

Możesz umieścić dodatkowe: [...] wewnątrz {} wgich zrobi w obiekcie. Następnie możesz go uszlachetnić.

hosseinsedighian Oct 11 2020 at 22:48

twój json to Array, ale umieszczasz do nich jeden klucz

jeśli chcesz używać go ze słowem kluczowym, powinieneś użyć:

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

{...} służy do definiowania pojedynczego obiektu, a drugi [...] jest tablicą i służy do definiowania sekwencji obiektów, wartości lub list ...

obiekty są zdefiniowane jako takie {klucz: obiekt lub lista lub wartość, ...} lista nie jest niczym więcej niż sekwencją obiektów lub list lub wartości, [obiekty lub lista lub wartości, ...] ...

spróbuj użyć pojedynczego obiektu, a nie tablicy.