【问题标题】:Angular2 - Parse JSON into an ObjectAngular2 - 将 JSON 解析为对象
【发布时间】:2017-07-27 23:47:52
【问题描述】:

示例:我有一个名为“Person”的实体类

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 解析为“Person”

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

【问题讨论】:

  • 这个字符串是从哪里来的,为什么它会损坏 JSON?假设您可以解决这个问题,最好的方法是重写您的构造函数,使其看起来像 constructor(data) { Object.assign(this, data); },然后使用 new Person(this.jsondata) 调用它。
  • 对不起,我的json写错了

标签: javascript json angular typescript


【解决方案1】:
public toPerson(data: string): Person {
    let jsonData = JSON.parse(data);

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

【讨论】:

  • 在 this.jsonData。我只能在 this.jsonData.stringify 和 this.jsonData.parse 之间进行选择...
  • 数据已经被字符串化了为什么要使用字符串化?
  • 你能加入聊天吗,会更快:) chat.stackoverflow.com/rooms/137472/…
  • this. new Person 的每个参数是不必要的,它应该只是jsonData.*
  • thnx @ssube 我忘了this 因为我更新了很多次代码:)
【解决方案2】:

一个更优雅的解决方案是使用JSON.parse 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;
}

【讨论】:

    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多