Angular 如何使用不同的属性名映射嵌套的json对象
我有一个包含嵌套对象的json结果。我需要将它们强制转换为自定义对象,这些对象的属性名称与json结果不同 对于父对象(Angular 如何使用不同的属性名映射嵌套的json对象,angular,typescript,rxjs,Angular,Typescript,Rxjs,我有一个包含嵌套对象的json结果。我需要将它们强制转换为自定义对象,这些对象的属性名称与json结果不同 对于父对象(Vraag),我可以映射它们。但是对于子对象(Antwoord),我不能 Json { "question":"Vraag 1", "answers":[ { "answer":"Voetbal" }, { "answer":"Volleybal" }
Vraag
),我可以映射它们。但是对于子对象(Antwoord
),我不能
Json
{
"question":"Vraag 1",
"answers":[
{
"answer":"Voetbal"
},
{
"answer":"Volleybal"
}
]
}
我的对象
export class Vraag {
tekst?: string;
antwoorden?: Antwoord[];
constructor(tekst?: string, antwoorden?: Antwoord[]) {
this.tekst = tekst;
this.antwoorden = antwoorden;
}
}
export class Antwoord {
tekst?: string;
constructor(tekst?: string) {
this.tekst = tekst;
}
}
服务
get(): Observable<Vraag> {
return this.http.get('the json above')
.map((response: Response) => response.json())
.map(({question , answers}) => new Vraag(question , answers)); // answers needs to be fetched inside the object too
}
get():可观察{
返回this.http.get('上面的json')
.map((response:response)=>response.json())
.map(({question,answers})=>new Vraag(question,answers));//也需要在对象内部获取答案
}
那么,如何像这样映射json呢
new-Vraag(“Vraag 1”)、[new-Antwoord(“voetbal”)、new-Antwoord(“volleybal”)]
在将数组元素传递给Vraag
构造函数之前,您应该将其映射到所需的对象。检查以下代码段:
get(): Observable<Vraag> {
return this.http.get('the json above')
.map((response: Response) => response.json())
.map(({question , answers}) => {
answers = answers.map(answer => new Antwoord(answer));
new Vraag(question , answers));
});
}
get():可观察{
返回this.http.get('上面的json')
.map((response:response)=>response.json())
.map({问题,答案})=>{
answers=answers.map(answer=>newantwoord(answer));
新的Vraag(问题、答案);
});
}
在将数组元素传递给Vraag
构造函数之前,您应该将数组元素映射到所需的对象。检查以下代码段:
get(): Observable<Vraag> {
return this.http.get('the json above')
.map((response: Response) => response.json())
.map(({question , answers}) => {
answers = answers.map(answer => new Antwoord(answer));
new Vraag(question , answers));
});
}
get():可观察{
返回this.http.get('上面的json')
.map((response:response)=>response.json())
.map({问题,答案})=>{
answers=answers.map(answer=>newantwoord(answer));
新的Vraag(问题、答案);
});
}
answers.map(answer=>new-answer(answer))
?@jornsharpe我将新的Vraag(问题,答案)
更改为新的Vraag(问题,答案.map({answer}=>new Antwoord(答案))
,以便答案(Antwoord)
可以有多个不同的命名属性。您的评论帮助我走上了正确的道路。@jornsharpe它现在给出了以下错误:错误TS2345:类型为“string”的参数不能分配给类型为“Antwoord[]”的参数。
@jornsharpe my bad,它现在工作了answers.map(answer=>新答案))
?@jornsharpe我已经更改了新的Vraag(问题,答案)
作为新的Vraag(问题,答案.map({answer}=>新的Antwoord(答案))
以便答案(Antwoord)
可以有多个不同的命名属性。您的评论帮助我找到了正确的路径。@jonrsharpe它现在给出了以下错误:错误TS2345:类型为“string”的参数不能分配给类型为“Antwoord[]”的参数。
@jonrsharpe我的错,它正在工作