从 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 中存储空值
Java中让fastJson识别Colloction和Map中的泛型类