如何从json中获取Date对象在typescript中的响应

Vla*_*ani 21 json typescript angular

这是我的json:

{
  "data": [
    {
      "comment": "3541",
      "datetime": "2016-01-01"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是模型:

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

    comment:string;
    datetime:Date;
}
Run Code Online (Sandbox Code Playgroud)

查询:

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

问题是在铸造之后Job[]我期待datetime属性Date但是它是字符串.它不应该转换为Date对象吗?我在这里失踪了什么?

Ami*_*mid 18

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助.


Gün*_*uer 6

没有办法知道TS/JS这个值是一个日期.这是一个字符串,并按此处理.其他数据类型是可区​​分的,但JSON不提供任何特殊的日期支持.您需要手动转换它.

例如,请参阅此讨论如何使用JSON传输和转换日期如何格式化Microsoft JSON日期?

  • 多数民众赞成,不是吗?如果``Job``对象的``datetime``属性为``Date``并且我正在转换为Job,这并不意味着我想相应地转换所有属性. (3认同)
  • 我不太了解 TS,但我认为您不能将字符串转换为日期,您需要将其转换。在运行时,你强制转换为“Job”是完全没有意义的。 (2认同)