Карта доступазначения в DTO из JSON? - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть 3 DTO внутри друг друга, как это:

export class firstDTO {
    public data: secondDTO;
}

export class secondDTO{
    public data: Map<Color, thirdDTO>;
}

После того, как я получаю JSON от бэкэнда, я могу распечатать его на консоли, но не могу получить доступ к значениям внутриКарта.Я получаю неопределенные ошибки.

private getJsonData(): void {
this.service.getJSON()
  .subscribe((jsonData: firstDTO) => {
    this.things = jsonData;
  });
}

То, как я хотел бы получить свойство Color, выглядит так:

this.things.data.data.key[0].property

Конечно, это не сработает, поэтому я хотел бы попросить помощи по этому вопросу.

Журнал консоли:

enter image description here

Вот как он генерируется, в бэкэнде: backend

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

В JSON нет Map объектов.Похоже, вместо этого у вас есть объект, который предназначен для индексации со строками вида LocationDTO(...).Вы должны объявить это следующим образом:

export class secondDTO{
    public data: {[s: string]: thirdDTO};
}

Если key[0] является строкой правильной формы, то вы используете this.things.data.data[key[0]].property для доступа к свойству третьего DTO.Обратите внимание на дополнительные квадратные скобки, где у вас была точка.

0 голосов
/ 28 сентября 2018

Предположим, ваш восстановленный json совпадает с типом первого dto, и вы знаете ключ третьего dto, который вы можете получить, как показано ниже, как в методе print.иначе просто итерируйте data.first.second, он вернет карту в виде некоторого ключа и значения, так как третье-временное сопоставление может быть повторено с использованием foreach.

export class AppComponent {
print(data:first){
console.log(data.first.second.get('color'));
}
}

class first{
first:second;
}

class second{
second:Map<string,third>;
}

class third{
third:string;
}
...