【问题标题】:Access Map<K, V> values in DTO from JSON?从 JSON 访问 DTO 中的 Map<K, V> 值?
【发布时间】:2019-03-04 08:19:39
【问题描述】:

我有 3 个像这样的 DTO-s:

export class firstDTO {
    public data: secondDTO;
}

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

从后端收到 JSON 后,我可以将其打印到控制台,但无法访问 Map 中的值。我收到未定义的错误。

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

我想达到颜色属性的方式是这样的:

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

当然不会这样,所以我想就这个问题寻求帮助。

【问题讨论】:

  • jsonData 的输出是什么?你能展示一下吗?
  • 在帖子中添加图片

标签: angular typescript collections frontend


【解决方案1】:

JSON 中没有 Map 对象。看起来您有一个对象,该对象旨在使用LocationDTO(...) 形式的字符串进行索引。你可以这样声明:

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

如果key[0] 是正确格式的字符串,那么您将使用this.things.data.data[key[0]].property 访问第三个DTO 的属性。请注意您有一个点的附加方括号。

【讨论】:

  • 由于某种原因我不能使用 [key[]]。 VS 代码将其标记为错误。我添加了一张关于后端的图片。彼此内部有 3 个 HashMap。我们是否应该将后端的 json 格式更改为不同的结构?
  • [key[0]] 语法有什么错误?你从哪里得到key?请努力提供我们需要的信息以帮助您,否则我们可能觉得不值得花时间跟进此线程。
【解决方案2】:

假设您检索到的 json 与第一个 dto 的类型相同 你知道第三个 dto 的关键,你可以像下面这样得到它,就像在 print 方法中一样。 否则只需迭代 data.first.second 它将返回地图作为一些键和值,因为可以使用 foreach 迭代 thirddto.maps。

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;
}

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 2011-03-06
    • 1970-01-01
    • 2011-04-21
    • 2011-07-31
    • 2019-07-30
    • 2019-01-23
    • 1970-01-01
    • 2011-12-02
    相关资源
    最近更新 更多