Typescript JSON字符串转换为类

18 浏览
0 Comments

Typescript JSON字符串转换为类

如何将这个JSON字符串转换为MyObject列表?

如果我这样做:

console.log(JSON.parse(json_string));

它返回的是一个Object列表,而不是MyObject列表。

0
0 Comments

问题出现的原因是当MyObject有50个或更多属性时,无法直接将JSON字符串转换为类。解决方法是在MyObject类中添加一个构造函数,使其扩展json对象。在ajax回调中,从json对象创建MyObject对象。如果要在typescript文件中使用jquery $.extend方法,需要先在typescript文件中启用jquery,可以通过运行"npm install --save /jquery"来实现。另外,应该使用"let newObject = new MyObject( JSON.parse(json) );"来创建MyObject对象。详情请参考该链接:https://stackoverflow.com/questions/22875636/41046474#41046474

0
0 Comments

问题的原因是:需要将一个JSON字符串转换为一个类的实例对象数组。

解决方法是:创建一个类的构造函数,并且对接收到的列表中的每个项调用该构造函数。

以下是解决方法的代码示例:

export class MyObject{
  constructor(public id: number, public text: string) { }
}
let data = [
  {
    "id": 1,
    "text": "Jon Doe"
  },
  {
    "id": 1,
    "text": "Pablo Escobar"
  }
];
let objects = data.map(o => new MyObject(o.id, o.text));

如果需要更多的方法,可以使用类的实例对象。如果只需要将对象作为来自服务器的数据对象使用,则接口的解决方法更加合适。

在这个问题中,`.map()`函数对于常量JSON数据是适用的,但对于类型为HTTPResponse的数据则不适用。

请注意,以上代码示例是从数组开始编写的,如果你需要获取数组的方法,你需要自行添加。

你可以在这里的 playground 中查看代码示例:[https://www.typescriptlang.org/play/index.html#src=export%20class%20MyObject%7B%0D%0A%20%20%20%20constructor(public%20id%3A%20number%2C%20public%20text%3A%20string)%20%7B%20%7D%0D%0A%7D%0D%0A%0D%0Alet%20data%20%3D%20%5B%0D%0A%20%20%7B%0D%0A%20%20%20%20%22id%22%3A%201%2C%0D%0A%20%20%20%20%22text%22%3A%20%22Jon%20Doe%22%0D%0A%20%20%7D%2C%0D%0A%20%20%7B%0D%0A%20%20%20%20%22id%22%3A%201%2C%0D%0A%20%20%20%20%22text%22%3A%20%22Pablo%20Escobar%22%0D%0A%20%20%7D%0D%0A%5D%3B%0D%0A%0D%0Alet%20objects%20%3D%20data.map(o%20%3D%3E%20new%20MyObject(o.id%2C%20o.text))%3B](https://www.typescriptlang.org/play/index.html#src=export%20class%20MyObject%7B%0D%0A%20%20%20%20constructor(public%20id%3A%20number%2C%20public%20text%3A%20string)%20%7B%20%7D%0D%0A%7D%0D%0A%0D%0Alet%20data%20%3D%20%5B%0D%0A%20%20%7B%0D%0A%20%20%20%20%22id%22%3A%201%2C%0D%0A%20%20%20%20%22text%22%3A%20%22Jon%20Doe%22%0D%0A%20%20%7D%2C%0D%0A%20%20%7B%0D%0A%20%20%20%20%22id%22%3A%201%2C%0D%0A%20%20%20%20%22text%22%3A%20%22Pablo%20Escobar%22%0D%0A%20%20%7D%0D%0A%5D%3B%0D%0A%0D%0Alet%20objects%20%3D%20data.map(o%20%3D%3E%20new%20MyObject(o.id%2C%20o.text))%3B)

0
0 Comments

在这个问题中,出现了需要将Typescript的JSON字符串转换为类的需求。出现这个问题的原因是,如果数据来自服务器,通常会以any类型的变量形式存在,并且可以将其分配给该类型的数组,这样就可以按预期工作。在Typescript中,不需要实现一个接口的类。只要满足接口要求的任何对象字面量都可以。

解决方法是,首先可以使用接口来定义对象的结构。然后,可以使用JSON.parse(jsonString)将字符串解析为JavaScript对象。如果JSON字符串与类的描述不匹配(例如,JSON具有类中不存在的属性),生成的对象仍然会具有这个属性,但在Typescript中无法访问任何额外的属性(除非也将其添加到接口中)。

,要将Typescript的JSON字符串转换为类,可以使用接口来定义对象的结构,并使用JSON.parse()将字符串解析为JavaScript对象。如果JSON字符串不匹配类的描述,生成的对象仍然会具有这个属性,但在Typescript中无法访问任何额外的属性。

这种方法的好处是,不需要创建额外的类,只需使用接口来描述数据的结构即可。这样可以更简单地处理只包含数据的对象。

0