如何从打字稿中的json响应中获取日期对象
Posted
技术标签:
【中文标题】如何从打字稿中的json响应中获取日期对象【英文标题】:How to get Date object from json Response in typescript 【发布时间】:2016-06-25 09:00:29 【问题描述】:这是我的 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
property 是Date
,但它是字符串。它不应该转换为 Date 对象吗?我在这里错过了什么?
【问题讨论】:
似乎是***.com/questions/4511705/…的副本 阅读那个,并没有真正回答我关于 TS 的问题 【参考方案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 Function 在 dateReviver 示例中。
希望这会有所帮助。
【讨论】:
在我的例子中,因为我只是接收到一个像2018-12-06T15:32:43.590
这样的字符串,我的函数只是将new Date(value)
分配给一个变量,然后在返回之前检查它的状态。【参考方案2】:
对于 TS/JS,没有办法知道这个值是一个日期。它是一个字符串,并被视为这样。其他数据类型是可区分的,但 JSON 不提供对日期的任何特殊支持。您需要手动转换。
请参阅此讨论如何使用 JSON How do I format a Microsoft JSON date? 传输和转换日期
【讨论】:
这很奇怪,不是吗?如果Job
对象具有datetime
属性为Date
并且我正在转换为Job,这是否意味着我要相应地转换所有属性。
我不太了解 TS,但我认为您不能将字符串转换为日期,而是需要转换它。在运行时,您将其转换为 Job
毫无意义。【参考方案3】:
如果可以使用自定义 TypeScript 转换器,则可以使用 ts-transformer-dates:
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));
输出:
data: [ comment: '3541', datetime: 2016-01-01T00:00:00.000Z ]
【讨论】:
【参考方案4】:您可以使用 2 个属性来实现它:一个用于传递日期的字符串属性(例如 dateStr)和一个用于在转换后保存数据对象的 Date 属性(例如 dateVal)。
然后在您的构造函数中,您可以简单地执行dateVal = new Date(dateStr)
之类的操作。
【讨论】:
以上是关于如何从打字稿中的json响应中获取日期对象的主要内容,如果未能解决你的问题,请参考以下文章