我有一个包含嵌套对象的json结果。我需要将它们强制转换为具有与json结果不同的属性名称的自定义对象(原始ng树表json)。
JSON消息:
{
brinname: "Aamir",
aantalPersonen: "122",
signalenVestiging: [
{
vestiging: "Ranchi",
aantalPersonen: "102",
signalenCode: [
{
signaalCode: "4",
aantalPersonen: "15"
},
{
signaalCode: "5",
aantalPersonen: "15"
} ]
}, {
vestiging: "Bangalore",
aantalPersonen: "82",
signalenCode: [
{
signaalCode: "6",
aantalPersonen: "15"
},
{
signaalCode: "7",
aantalPersonen: "15"
} ]
} ]
},
{
brinname: "Abhinav",
aantalPersonen: "122",
signalenVestiging: [
{
vestiging: "Bangalore",
aantalPersonen: "102",
signalenCode: [ {
signaalCode: "7",
aantalPersonen: "15"
}]
} ]
必需格式:
[{
"data":
[
{
"data":{
"name":"Aamir",
"aantalPersonen":"122",
},
"children":[
{
"data":{
"name":"Ranchi",
"aantalPersonen":"102",
},
"children":[
{
"data":{
"signaalCode":"4",
"aantalPersonen":"15",
}
},
{
"data":{
"signaalCode":"5",
"aantalPersonen":"10",
}
},
]
},
{
"data":{
vestiging: "Bangalore",
aantalPersonen: "82",
},
"children":[
{
"data":{
signaalCode: "6",
aantalPersonen: "15"
}
}
]
}
]
}
,
{
"data":{
brinname: "Abhinav",
aantalPersonen: "122",
},
"children":[
{
"data":{
vestiging: "Bangalore",
aantalPersonen: "102",
}
},
"children":[
{
"data":{
"signaalCode":"4",
"aantalPersonen":"15",
}
}
] ]
}
]
}]
那么,我怎么能这样映射json ?:有人可以给我一个演示示例。这是一个新的角度,解决它遇到了很多麻烦。对我来说真的是很大的帮助。
答案 0 :(得分:1)
我假设“ json结果”来自后端调用。因此,最好,最简单的方法是将可观察对象映射到目标格式。
您应该使用HttpClient(对后端的调用将使您返回一个Observable)-> https://angular.io/guide/http
创建一个接口,该接口将描述json对象的字段名称(我们称其为PersonalDetails):
id disch_date visit_date
1: 1234 2018-03-14 2018-03-17
2: 1234 2018-03-17 2018-03-17
3: 1234 2018-04-19 2018-04-30
4: 2345 2018-04-15 2018-05-12
5: 2345 2018-05-15 <NA>
6: 3456 2018-05-16 2018-05-16
可以有多个接口(json对象的确很大,因此最好拆分它并创建其他接口,这些接口将嵌套在第一个接口中)。
为'prime ng tree table json'创建接口=>与上面相同,我们称其为PrimeNgTableData
创建一个函数,该函数将使用类型为'PersonalDetails'的参数(从点2开始),并将其强制转换为第二个接口PrimeNgTableData(从点3开始)。让我们这样命名该函数:
export interface PersonalDetails {
brinname: string,
aantalPersonen: string,
...
}
export function asPrimeNgTableData(personalDetails: PersonalDetails): PrimeNgTableData {
return {
...
}
}
private personalDetails$: Observable<PersonalDetails> = this.someServiceThatCallsHttp.getPersonalDetails();
private primeNgTableData$: Observable<PrimeNgTableData> = this.personalDetails$.pipe(
map((personalDetails: PersonalDetails) => asPrimeNgTableData(personalDetails))
);