一尘不染

如何从打字稿中的JSON响应中获取日期对象

json

这是我的json:

{
  "data": [
    {
      "comment": "3541",
      "datetime": "2016-01-01"
    }
  ]
}

这是模型:

export class Job {
    constructor(comment:string, datetime:Date) {
        this.comment = comment;
        this.datetime = datetime;
    }

    comment:string;
    datetime:Date;
}

查询:

getJobs() {
        return this._http.get(jobsUrl)
            .map((response:Response) => <Job[]>response.json().data)
}

问题是强制转换为Job[]我期望datetime属性后,Date但它是字符串。它不应该转换为Date对象吗?我在这里想念什么?


阅读 238

收藏
2020-07-27

共1个答案

一尘不染

@Gunter是绝对正确的。我唯一要添加的实际上是如何反序列化json对象,使其日期属性保持为日期而不是字符串(从引用的帖子中看到这种方法并不容易)。

这是我的尝试:

export class Helper
{
    public static Deserialize(data: string): any
    {
        return JSON.parse(data, Helper.ReviveDateTime);
    }

    private static ReviveDateTime(key: any, value: any): any 
    {
        if (typeof value === 'string')
        {
            let a = /\/Date\((\d*)\)\//.exec(value);
            if (a)
            {
                return new Date(+a[1]);
            }
        }

        return value;
    }
}

您可以在此处看到这种方法的示例:JSON.parse在dateReviver示例中的函数

希望这可以帮助。

2020-07-27