我以这种形式从后端收到一些json数据。字段'labels'应该是字符串映射(后端处理它的方式):
收到json数据:
0:Object {labels:Object {group1:“developers”} name:“test1”} 1:Object {labels:Object {group2:“testers”} name:“test2”}
在我的打字稿代码中,我有一个名为Group的类。当我收到此回复时,我尝试使用
将其转换为Group类this.groups = <Group[]>data
我的问题是标签应该作为Map处理而不是作为对象处理,这实际上从未使用该行处理,因此我无法设置新的键和值。这是实现这一目标的最佳方式?这是我的代码:
服务
@Injectable()
export class ProjectsService {
constructor(private http: Http) { }
getGroups() {
let headers = new Headers();
headers.append('Content-type', 'application/json');
headers.append('Accept', 'application/json');
return this.http.get('http://localhost:8080' + '/groups' , { headers:headers })
.map(res => res.json());
}
}
组件
ngOnInit() {
this.groupsService.getGroups().subscribe(data => {
this.groups = <Group[]>data
console.log("Groups",this.groups)
}
, err => { console.log(err) })
}
export class Group {
name:string;
users?:string[];
labels?:Map<string, string>
}
答案 0 :(得分:1)
Map
是JavaScript类。 JSON没有这种类型,这就是labels
显示为Object
的原因。所以你有两个选择:
Map
labels
labels
的类型更改为{ [label: string]: string }
,并将其用作Object
构建地图可能如下所示:
this.groups = (<any[]>data).map(group => {
let labelsObject = group.labels;
group.labels = new Map<string, string>();
if (labelsObject) {
Object.keys(labelsObject).forEach(key => group.labels.set(key, labelsObject[key]));
}
return <Group>group;
});