Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.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 如何使用不同的属性名映射嵌套的json对象_Angular_Typescript_Rxjs - Fatal编程技术网

Angular 如何使用不同的属性名映射嵌套的json对象

Angular 如何使用不同的属性名映射嵌套的json对象,angular,typescript,rxjs,Angular,Typescript,Rxjs,我有一个包含嵌套对象的json结果。我需要将它们强制转换为自定义对象,这些对象的属性名称与json结果不同 对于父对象(Vraag),我可以映射它们。但是对于子对象(Antwoord),我不能 Json { "question":"Vraag 1", "answers":[ { "answer":"Voetbal" }, { "answer":"Volleybal" }

我有一个包含嵌套对象的json结果。我需要将它们强制转换为自定义对象,这些对象的属性名称与json结果不同

对于父对象(
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我的错,它正在工作