将字符串转换为对象

AJ_

我正在制作一个 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章