2017-01-09 20 views
0

入れ子オブジェクトを持つjson結果があります。 json結果とは異なるプロパティ名を持つカスタムオブジェクトにそれらをキャストする必要があります。Observable Observable Map異なるプロパティ名を持つ入れ子になった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 
} 

だから、どのように私は、JSONのリクをマッピングすることができますEこれはあなただけVraagコンストラクタに渡す前に、必要なオブジェクトに対する回答の配列要素をマッピングする必要があり

new Vraag("Vraag 1" , [new Antwoord("voetbal"),new Antwoord("volleybal")]);

+5

'answers.map(answer =>新しい回答(回答))'? – jonrsharpe

+0

@jonrsharpe私は '新しいVraag(質問、回答)'を '新しいVraag(質問、answers.map(({answer})=>新しいAntwoord(答え) 'は複数の異なる名前付きプロパティを持つことができます。あなたのご意見は私が正しい道に乗るのを助けました。 –

+0

@jonrsharpeこれは次のようなエラーを出します: 'エラーTS2345: 'string'型の引数が 'Antwoord []'型のパラメータに代入不可能です。 ' –

答えて

2

?:します。次のスニペットを確認してください:

関連する問題