从 JSON 访问 DTO 中的 Map<K, V> 值?

Posted

技术标签:

【中文标题】从 JSON 访问 DTO 中的 Map<K, V> 值?【英文标题】:Access Map<K, V> values in DTO from JSON? 【发布时间】: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 的输出是什么?你能展示一下吗? 在帖子中添加图片 【参考方案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;

【讨论】:

以上是关于从 JSON 访问 DTO 中的 Map<K, V> 值?的主要内容,如果未能解决你的问题,请参考以下文章

当我传递 json 对象时,它使用 DTO 在 mongodb 中存储空值

controller通过map返回减少dto类的创建

Java中让fastJson识别Colloction和Map中的泛型类

如何使用 AWS Glue 从嵌套 json 字段/结构中的 DynamicFrame 访问数据

javaweb应用,dto怎么遍历

如何仅将 JSON 请求正文的几个字段从 DTO 发布到 URL 春季启动