Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度:HTTP客户端转换树状数据结构_Angular_Angular Httpclient - Fatal编程技术网

Angular 角度:HTTP客户端转换树状数据结构

Angular 角度:HTTP客户端转换树状数据结构,angular,angular-httpclient,Angular,Angular Httpclient,我从服务器获得了以下结构(根据JSON结构) 我想在一个有角度的物体上 export interface Organization { name: string; lstDeparments: Department []; } export interface Department { name: string; lstRoles: string []; } 但不知何故,我不知道如何在Angular中设置匹配接口。因为属性name是动态变化的(例如Orga1,Orga2),属性

我从服务器获得了以下结构(根据JSON结构)

我想在一个有角度的物体上

export interface Organization {
  name: string;
  lstDeparments: Department [];
}
export interface Department {
  name: string;
  lstRoles: string [];
}
但不知何故,我不知道如何在Angular中设置匹配接口。因为属性
name
是动态变化的(例如
Orga1
Orga2
),属性列表也需要动态地填充内容


如何正确设置
界面
?(进行自动转换)

这种数据结构有一种特定的语法:

interface Payload {
  [key: string]: Orga;
}

interface Orga {
  [key: string]: Department;
}

interface Department {
  [key: string]: Role;
}
如果需要组织列表,则必须在对象上迭代,而不是在数组上迭代

您可以使用
Object.keys
或在最近的浏览器中(或如果您有polyfill)执行此操作
Object.entries

const orgas = Object.keys(payload).map(key => payload[key]);
const orgas = Object.entries(payload).map(([key, value]) => value);
您也可以使用through
Symbol.iterator
对对象进行迭代,但我认为这有点过分:

const有效载荷={
orga1:{name:'orga 1'},
orga2:{name:'orga 2'},
[符号.迭代器]:函数*(){
for(对象的常量键。键(此)){
交出这个[钥匙];
}
}
};
for(有效载荷的常量值){
console.log(值);

}
对于这种数据结构,您有一种特定的语法:

interface Payload {
  [key: string]: Orga;
}

interface Orga {
  [key: string]: Department;
}

interface Department {
  [key: string]: Role;
}
如果需要组织列表,则必须在对象上迭代,而不是在数组上迭代

您可以使用
Object.keys
或在最近的浏览器中(或如果您有polyfill)执行此操作
Object.entries

const orgas = Object.keys(payload).map(key => payload[key]);
const orgas = Object.entries(payload).map(([key, value]) => value);
您也可以使用through
Symbol.iterator
对对象进行迭代,但我认为这有点过分:

const有效载荷={
orga1:{name:'orga 1'},
orga2:{name:'orga 2'},
[符号.迭代器]:函数*(){
for(对象的常量键。键(此)){
交出这个[钥匙];
}
}
};
for(有效载荷的常量值){
console.log(值);

}
(当然,您可以添加其他属性,例如“name”,只是那些无法识别的属性将被视为子接口)@ashish.gd从给定的结构来看,似乎不是这样。有效负载包含一个Orgas列表,这些Orgas都已命名。所以它不是一个数组,而是一个包含动态属性的对象,每个属性都是一个子接口。我读错了。删除我的评论以避免对OP或其他任何人造成任何混乱。回复的速度比我能够实现和思考的都快。无法接受之前的答案:-)Thx这非常有效+1尽管实施工作正常,但我对解决方案有一些小问题:-/。即如何获取组织的列表,例如
组织
。正在尝试
Payload.map(item=>Object.keys(item)[0])
在调试中是一个有效的(?)想法,但在Angular中,我得到了一个编译错误,因为
Orga
中没有提供
map
(您当然可以添加其他属性,例如“name”,只是那些未被识别的属性将被视为子接口)@ashish.gd,从给定的结构来看,它看起来不像。有效负载包含一个Orgas列表,这些Orgas都已命名。所以它不是一个数组,而是一个包含动态属性的对象,每个属性都是一个子接口。我读错了。删除我的评论以避免对OP或其他任何人造成任何混乱。回复的速度比我能够实现和思考的都快。无法接受之前的答案:-)Thx这非常有效+1尽管实施工作正常,但我对解决方案有一些小问题:-/。即如何获取组织的列表,例如
组织
。正在尝试
Payload.map(item=>Object.keys(item)[0])
在调试中是一个有效的(?)想法,但是在Angular中我得到了一个编译错误,因为
Orga
中没有提供
map