我正在制作一个 angular2 应用程序,现在我正在尝试将一个字符串解析为一个对象。基本上发生的事情是我传回一个字符串,我想将它转换为一个名为 IDate 的唯一对象。我得到一个格式为“2017-02-27T00:00:00”的字符串,但我希望它是IDate()。所以到目前为止我所做的是创建了一个 IDate 类,它接受一个字符串并将其转换为日期。我创建了一个 Mock 类来将响应映射到一个对象。但是,当我打印对象时,我看到该值仍然是一个字符串。有谁知道如何实现我在说什么?当我映射来自控制器的响应时,我基本上试图将字符串映射到一个对象。我可以在这样的操作中做到这一点,resposne.map(r.time => new Date(r.time));
但我宁愿将它映射到响应中,因为我在其他地方调用了这个控制器,我不想在单独的页面上重复这个过程。这能做到吗?
控制器
return Json(new { Number = 1, Time= "2017-02-27T00:00:00" });
客户
class IDate {
value: Date;
contructor(value) {
this.value = new Date(value);
}
}
class Mock {
number: number;
time: IDate;
}
mock: Mock = null;
this.service.get()
.subscribe(
response => {
console.log("Test response");
this.mock = response;
console.log(this.mock);
},
安慰
Object
number:1
time:"2017-02-27T00:00:00"
__proto__:Object
我假设您从 REST API 获取 JSON 字符串。如果这适用于您的情况,您可以使用reviver
. 这是使用 的一种简单方法reviver
:
JSON.parse(jsonString, function (key, value) {
if (key === "time")
return new Date(value);
return value;
})
这是正在运行的小提琴的链接:https : //jsfiddle.net/sayan751/Lzb8u638/。
根据 OP 的评论更新
将通用对象转换为特定类的实例并不是很简单。请注意,this.mock = response;
这不会response
转换为Mock
类的实例(请参阅新的小提琴链接)。
您可以使用Object.assign
,但它可能不适用于类型转换。
此外,我认为在您的情况下,{Number:number, Time:string}
您的 JavaScript 代码中收到的 json 对象的架构与Mock
:的架构不匹配{number:number, time:{value:Date}}
。
在这种情况下,最好(根据我的意见)为Mock
. 一种简单的方法如下。有关详细代码,请参阅新的小提琴链接。
class Mock {
number: number;
time: IDate;
public static create(obj):Mock{
let retVal = new Mock();
retVal.number=obj.number;
if(typeof obj.time === "string")
retVal.time = new Date(obj.time); //better to use moment in this case, if possible
else if(obj.time instanceof Date)
retVal.time = obj.time;
return retVal;
}
}
var jsonObj = { number: 1, time: "2017-02-27T00:00:00" };
var obj = Mock.create(jsonObj);
小提琴链接:https : //jsfiddle.net/sayan751/mxoqqc5a/
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句