2017-03-07 135 views
2

例子:我有一个实体 - 类名为“Person”Angular2 - 解析JSON为对象

constructor(name:string,surname:string,birthdate:string) { 
     this.name = name; 
     this.surname = surname; 
     this.birthdate = birthdate; 
    } 

而在一个“经理”一流的我得到一个字符串,它看起来像一个JSON:

{ 
"name" : "testName", 
"surname" : "testSurrname", 
"birthdate" : "JJJJ:MM:DD hh:mm:ss" 
} 

那么如何将JSON解析成一个 “人”

personData : Person; 
jsonData : JSON; 
public toPerson(data: string): Person { 
     this.jsonData = JSON.parse(data); 
     .? 
     .? 
     .? 
     personData = new Person(....); 
     return personData; 
    } 
+0

这个字符串来自哪里,为什么它被打破JSON?假设你可以对此进行分类,最好的方法是重写你的构造函数,使其看起来像'constructor(data){Object.assign(this,data); }',然后用'new Person(this.jsondata)'调用它。 – 2017-03-07 16:57:21

+0

对不起,我写了json错误 – ALSTRA

回答

1
 public toPerson(data: string): Person { 
     let jsonData = JSON.parse(data); 

     personData = new Person(jsonData.name, jsonData.surname, jsonData.birthdate); 
     return personData; 
    } 
+0

对不起,我写了json错误 – ALSTRA

+0

@ALSTRA在this.jsonData处看到更新 –

+0

。我只能选择this.jsonData.stringify和this.jsonData.parse ... – ALSTRA

1

一个更优雅的解决方案是使用JSON解析reviver:

public static fromJSON(json: any): Person { 
    if (typeof json === 'string') { 
     return JSON.parse(json, Person.reviver); 
    } else if (json !== undefined && json !== null) { 
     let person = Object.create(Person.prototype); 
     return Object.assign(person, json); 
    } else { 
     return json; 
    } 
    } 

    public static reviver(key: string, value: any): any { 
    return key === '' ? Person.fromJSON(value) : value; 
    }