Typescript JSON字符串转换为类
问题出现的原因是当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
问题的原因是:需要将一个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)
在这个问题中,出现了需要将Typescript的JSON字符串转换为类的需求。出现这个问题的原因是,如果数据来自服务器,通常会以any类型的变量形式存在,并且可以将其分配给该类型的数组,这样就可以按预期工作。在Typescript中,不需要实现一个接口的类。只要满足接口要求的任何对象字面量都可以。
解决方法是,首先可以使用接口来定义对象的结构。然后,可以使用JSON.parse(jsonString)将字符串解析为JavaScript对象。如果JSON字符串与类的描述不匹配(例如,JSON具有类中不存在的属性),生成的对象仍然会具有这个属性,但在Typescript中无法访问任何额外的属性(除非也将其添加到接口中)。
,要将Typescript的JSON字符串转换为类,可以使用接口来定义对象的结构,并使用JSON.parse()将字符串解析为JavaScript对象。如果JSON字符串不匹配类的描述,生成的对象仍然会具有这个属性,但在Typescript中无法访问任何额外的属性。
这种方法的好处是,不需要创建额外的类,只需使用接口来描述数据的结构即可。这样可以更简单地处理只包含数据的对象。