Angular / Typescript - Как читать в JSON как объект - PullRequest
1 голос
/ 22 апреля 2020

Я пытаюсь преобразовать следующие JSON данные из Observable в объект машинописного текста, но он не преобразует встроенный JSON в массивы, которые находятся в модели объектов. Как бы я преобразовал эти многомерные JSON данные в объект?

JSON

[
    {
        "name": "Fake Name",
        "data1": {
            "entry1": false,
            "entry2": true,
            "entry3": "xyz"
        },
        "data2": {
            "entry1": false,
            "entry2": true,
        },
        "data3": {
            "entry1": false,
            "entry2": true,
            "entry3": "xyz"
        },
        "info1": false,
        "info2": "xyz"
    },{...}
]

Объект

export class NewObject {
  public name: string;

  public data1: object[];

  public data2: object[];

  public data3: object[];

  public info1: string;
  public info2: string;

  constructor(name: string, data1: [], data2: [], data3: [],
              info1: string, info2: string
  ) {
    this.name = name;
    this.data1 = data1;
    this.data2 = data2;
    this.data3 = data3;
    this.info1 = info1;
    this.info2 = info2;
  }
}

1 Ответ

1 голос
/ 22 апреля 2020

Прежде всего, строка JSON в вашем примере неверна для data2.entry2, запятая в конце слишком большая.

Вы можете преобразовать JSON строки в JavaScript объекты с помощью JSON .parse (). Но будьте осторожны, это не вызовет конструктор вашего объекта TypeScript и не проверит, существуют ли какие-либо атрибуты ваших объектов в действительности в строке JSON.

export class NewObject {
public name: string;

public data1: object[];

public data2: object[];

public data3: object[];

public info1: string;
public info2: string;

constructor(name: string, data1: [], data2: [], data3: [],
          info1: string, info2: string
) {
this.name = name;
this.data1 = data1;
this.data2 = data2;
this.data3 = data3;
this.info1 = info1;
this.info2 = info2;
}
}

const jsonstring = `
[
  {
    "name": "Fake Name",
    "data1": {
        "entry1": false,
        "entry2": true,
        "entry3": "xyz"
    },
    "data2": {
        "entry1": false,
        "entry2": true
    },
    "data3": {
        "entry1": false,
        "entry2": true,
        "entry3": "xyz"
    },
    "info1": false,
    "info2": "xyz"
  }
]
`;

let a: NewObject[];

a = JSON.parse(jsonstring);

Это мой первый ответ здесь вопрос, так что я не знаю, как правильно отформатировать все это, но я надеюсь, что понятно, что я пытаюсь сказать:)

...