2017-02-02 101 views
0

解析JSON我從服務器按以下格式發送一個JSON的回覆:角2:在構造函數中

{id: Int, name: String, childJSON: String} 

,並願意將其映射到

export class Student{ 
    constructor(public id: string, 
       public name: string, 
       public childJSON: ChildObject) { 

    } 

export class ChildObject { 
     constructor(public class: number, 
        public age: number){} 

response.json() as Student;我收到{id:1, name: "sumit", childJSON: "{class: 5, age: 10}"即childJSON具有字符串類型而不是ChildObject類型。基本上這個字符串沒有映射到我的子對象。這是正確的方式來實現,否則我需要從服務器,而不是僅僅JSON字符串

+0

應該是'{ID:詮釋,名稱:字符串,childJSON:ChildObject}' –

+2

@AmitKumarGhosh。 Noooooooo。看起來你把TypeScript與另一種語言混淆了。 – AngularChef

回答

0

你需要「重新水合物」,在構造函數中的對象發送子對象,你不能使用「參數財產」的快捷方式做到這一點(在那裏你在構造函數中使用public自動構造PARAMS轉換成類屬性的技術)。

這是我會怎麼做:

export class Student{ 
    constructor(options: { 
       id: string; 
       name: string; 
       childJSON: any; 
       }) { 
    // Now you have to instantiate the class properties one by one. 
    this.id = options.id; 
    this.name = options.name; 
    this.childJSON = new ChildObject(options.childJSON); 
    } 
} 

然後實例:

const student = new Student(studentJson); 

或者,如果您使用的是可觀察到取數據:

this.http.get(...).map(...).subscribe(studentJson => 
    this.student = new Student(studentJson) 
} 

該解決方案更加靈活,因爲您可以直接傳遞原始的JSON對象用於實例化。在你的榜樣,你必須寫類似:

// NOT GOOD: You must pass each property individually, in the right order... 
const student = new Student(studentJson.id, studentJson.name,...); 
+0

常量學生=新的學生(studentJson);,我不能這樣做,因爲我有收到和發送使用觀測數據; –

+0

謝謝,我希望這個作品。但我的實際情況是不是在問題中提到更加繁瑣。雖然這是一個洞察力的方式知道:) –