当前位置: 首页 > 知识库问答 >
问题:

将JSON字符串键入到类中

楮杰
2023-03-14

让我们成为这个 JSON 字符串:

[
    {
        "id": 1,
        "text": "Jon Doe"
    },
    {
        "id": 1,
        "text": "Pablo Escobar"
    }
]

假设是这个类:

export class MyObject{
    id: number;
    text: string;
}

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

如果我做了:

console.log(<MyObject[]>JSON.parse(json_string));

它返回<code>Object</code>的列表,而不是<code>MyObject</code>的列表

共有3个答案

邹麻雀
2023-03-14

当MyObject有50个或更多属性时出现问题…

在MyObject类中添加构造函数,以便它扩展json对象。

export class MyObject {
    constructor( json: any )
    {
      $.extend(this, json);
    }
    id : number;
    text : string;

    methodOnMyObject() {...}
}

在ajax回调中,从json对象创建MyObject对象:

let newObject = new MyObject( json );
newObject.methodOnMyObject();

我在那篇帖子中详细介绍了解决方案。

宋耀
2023-03-14

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

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));

你可以在这里的操场上看看。

燕翼
2023-03-14

这里不一定需要类。你可以使用接口

export interface MyObject{
  id: number;
  text: string;
}

然后你可以写:

var myObjArray : MyObject[] =  [
  {
    "id": 1,
    "text": "Jon Doe"
  },
  {
    "id": 1,
    "text": "Pablo Escobar"
  }
];

如果你的数据来自服务器,你可能会把它放在一个any类型的变量中,你可以把它赋给一个该类型的数组,它就会像预期的那样工作。

var data: any = getFromServer();
var myObjectArray:MyObject[] = data;

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

如果您的数据仍为字符串,则可以使用<code>JSON。parse(jsonString)将字符串解析为JavaScript对象。

在这里查看游乐场

 类似资料:
  • 我有以下JSON字符串: 我只想要和。我试过这样的方法: 但我得到了以下错误: 我只使用过几次JSON。有人能帮我吗? 对我来说最好的例子是这样的,我在另一个例子中做过: 可能吗? 现在我已经做到了: 我试着这样做: 然后: 但现在当我做一个Prtinout时,我会得到和以前一样的错误:

  • 我有一个字符串xml 我使用下面的代码将xml sting转换为json,并使用XMLDocument和JsonConvert。序列化XmlNode()。 我得到的输出如下 ............................................................... 但是,我想忽略“@”和{?xml”:{“@version”:“1.0”,“@encoding”:“

  • 问题内容: 我想转换JSON字符串 至 注意:我没有使用排序的版本进行通信(因为键顺序并不重要),我需要一个排序的版本来执行本地测试(通过比较JSON字符串)。 编辑: I4V指出了使用Json.Net的解决方案,我宁愿使用不需要包含任何第三方库的解决方案(实际上,我在应用程序中使用内置的System.Json) 我张贴由I4V +一些测试提供的解决方案要点这里。谢谢你们。 问题答案: 我将为此使

  • 问题内容: 我正在尝试在Java控制台应用程序中输入信息,但似乎无法运行它。 这是我的Java文件的样子: 但是我得到了错误: 我的源文件夹中有一个keyboard.class文件。我将Eclipse与Ubuntu结合使用。 问题答案: 表示无法编译代码。 您必须导入Keyboard,类似 当您使用不同包中的类(不是当前类的同一包)时,必须导入该类。如果该类也位于同一包中,则无需导入。 通常将类分

  • 我正在编写一个JSON接口/库,用于Bugzilla的webservice。 这可以使用注释或其他内容吗?还是要为每个这样的实例编写一个自定义反序列化程序? 我试着做了一些研究,发现了一些关于值实例化器或使用构造函数的信息,但使用构造函数不是反bean吗?我发现新特性的文档很少或难以理解。 示例: 我对一个字段使用pojo的原因是,这个用户类是由另一个具有更多字段的用户类扩展的。虽然我可以实现一个

  • 主要内容:输入单个字符,输入字符串,总结C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。 getchar()、getche()、getch():这三个函数都用于输入单个字符。 gets():获取一行数据,并作为字符串处理。 scanf() 是最灵活、最复杂、最常用的输入函数,上节我们已经进行了讲解,本节接着讲解剩下的函数,也就是字符输入函数和字符串