Typescript JSON字符串到类

Ben*_*Ben 2 json casting object typescript

让这个JSON字符串:

[
    {
        "id": 1,
        "text": "Jon Doe"
    },
    {
        "id": 1,
        "text": "Pablo Escobar"
    }
]
Run Code Online (Sandbox Code Playgroud)

让我们上课:

export class MyObject{
    id: number;
    text: string;
}
Run Code Online (Sandbox Code Playgroud)

如何将此JSON字符串转换为列表MyObject

如果我做:

console.log(<MyObject[]>JSON.parse(json_string));
Run Code Online (Sandbox Code Playgroud)

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

Tit*_*mir 7

你不一定需要这里的课程.你可以使用一个界面

export interface MyObject{
  id: number;
  text: string;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以写:

var myObjArray : MyObject[] =  [
  {
    "id": 1,
    "text": "Jon Doe"
  },
  {
    "id": 1,
    "text": "Pablo Escobar"
  }
];
Run Code Online (Sandbox Code Playgroud)

如果您的数据来自服务器,您可能会将其放在any类型的变量中,您可以将其分配给该类型的数组,它将按预期工作.

var data: any = getFromServer();
var myObjectArray:MyObject[] = data;
Run Code Online (Sandbox Code Playgroud)

在typescript中,您不需要实现接口的类.任何满足接口契约的对象文字都可以.

如果您的数据仍然是字符串,则可以使用JSON.parse(jsonString)该字符串将字符串解析为JavaScript对象.

在这里看操场

  • 如果JSON不符合描述,则不会出现错误,您无法从typescript访问任何额外的属性(除非您将它们添加到接口) (2认同)
  • @Ben Nitzan Tomer如果您打算也有方法,那么使用类是正确的,但是如果您只寻找用于保存数据的简单对象,则无需创建额外的clss (2认同)

tos*_*skv 5

您将需要为您的类创建一个构造函数,并为收到的列表中的每个项目调用它。

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));
Run Code Online (Sandbox Code Playgroud)

您可以在这里的操场上检查一下

  • @Ben这取决于您要查找的内容。如果只需要数据对象,则可以使用TitianCernicovaDragomir回答的接口。但是,如果要在对象上也有方法,则需要实例化类实例,而toskv解决方案就是您要寻找的解决方案。 (3认同)