如何从typescript中的json响应中获取日期对象
这是我的json:如何从typescript中的json响应中获取日期对象,json,typescript,angular,Json,Typescript,Angular,这是我的json: { "data": [ { "comment": "3541", "datetime": "2016-01-01" } ] } 以下是模型: export class Job { constructor(comment:string, datetime:Date) { this.comment = comment; this.datetime = datetime; }
{
"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)
}
getJobs(){
返回此。\u http.get(jobsUrl)
.map((response:response)=>response.json().data)
}
问题是,在转换到
Job[]
之后,我希望datetime
属性是Date
,但它是字符串。它不应该投射到日期对象吗?我在这里遗漏了什么?对于TS/JS,无法知道该值是日期。它是一个字符串,被当作字符串处理。其他数据类型是可以区分的,但JSON不提供对日期的任何特殊支持。您需要手动转换它
例如,请参见本讨论,如何使用JSON传输和转换日期是绝对正确的。我唯一想补充的是如何反序列化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;
}
}
例如,您可以在这里看到这种方法:在dateReviver示例中
希望这有帮助。如果可以使用自定义的TypeScript转换器,可以使用:
import { toDates } from 'ts-transformer-dates';
const value = {
"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;
}
console.log(toDates<{data:Job[]}>(value));
您可以使用两个属性来实现它:一个字符串属性(比如dateStr)用于传递日期,另一个日期属性(比如dateVal)用于保存转换后的数据对象
然后在你的构造函数中,你可以简单地做一些事情,比如
dateVal=newdate(dateStr)
看起来像是一个重复,读了那个,并没有真正回答我关于TST的问题,这很奇怪,不是吗?如果Job
对象的datetime
属性为Date
,并且我正在转换为Job,这是否意味着我要相应地转换所有属性。我不太清楚这一点,但我认为您不能将字符串转换为日期,您需要转换它。在运行时,您强制转换到作业
是毫无意义的。在我的例子中,因为我只是接收一个字符串,如2018-12-06T15:32:43.590
,我的函数只是将新日期(值)
分配给一个变量,然后在返回之前检查其状态。