2017-01-09 15 views
0

我有一個具有嵌套對象的JSON結果。我需要將它們轉換爲具有與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 
} 

所以,我怎麼能映射JSON LIK E本?:

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

+5

'answers.map(answer => new Answer(answer))'? – jonrsharpe

+0

@jonrsharpe我已經將'new Vraag(question,answers)'改爲'new Vraag(question,answers.map(({answer})=> new Antwoord(answer)))''以便'answers(Antwoord) '可以有多個不同的命名屬性。你的評論幫助我走上了正確的道路。 –

+0

@jonrsharpe它現在給出了以下錯誤:'錯誤TS2345:類型'字符串'的參數不能分配給'Antwoord []'類型的參數。' –

回答

2

你應該將它傳遞給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)); 
        }); 
} 
相關問題