将 JSON 对象映射到 TypeScript 对象

Posted

技术标签:

【中文标题】将 JSON 对象映射到 TypeScript 对象【英文标题】:Map JSON object into TypeScript Object 【发布时间】:2014-11-07 11:10:33 【问题描述】:

我正在使用 AJAX JQuery 从服务器返回一个对象数组,一个示例

["Name":"Name1","ResultSet":["Id": 1,"Name":"Name1", "Id": 2,"Name":"Name2"],"Name": "Name11", "ResultSet": ["Id": 11, "Name": "Name11", "Id": 22, "Name": "Name22"]]

另外,我有以下要映射的 TypeScript 对象

interface IResult 
   name: string;
   resultSet: any;


export class Result implements IResult 
    constructor(public name: string, public resultSet: any)  

我处理结果的方式,

dataService.execute(function (results) 
    $(results).each(function (index, element) 
        console.log(element.Name);
            $.each(element.ResultSet, function (key, value) 
                $.each(value, function (key, value) 
                    console.log(key + ' - ' + value);
                );
            );
        );
    );

在 VS 2013 中,编译器抱怨:

The property 'Name' does not exist on value of type 'Element'.

有没有办法将返回的对象集合映射到 TS Result 对象数组?

谢谢

更新 我最终循环如下:

var result = <Array<IResult>>results;

$.each(result, function (index, item) 
      // item is Result instance
      // item.name
      console.log(item.name);

      // item.resulSet
      $.each(item.resultSet, function (key, val) 
            // val is single Object (one result)
            $.each(val, function (k, v) 
                  // k,v => key/value for each property on result
                    console.log(k + ' - ' + v);
            );
      );

);

【问题讨论】:

【参考方案1】:

在 IResult 的接口定义中,属性是小写的,但您尝试使用大写来访问它们。由于您的 JSON 具有大写更改 IResult 为:

interface IResult 
   Name: string;
   ResultSet: any;

【讨论】:

以上是关于将 JSON 对象映射到 TypeScript 对象的主要内容,如果未能解决你的问题,请参考以下文章

json 2 typescript 映射给出类型错误

如何在 TypeScript Angular 2 中将 Json 对象数组映射到另一个普通 json 对象

Java 映射到 JSON 到 Typescript 映射

在 Typescript 中解析 JSON 对象

更改(映射)JSON列表形状 - 在TypeScript中向对象添加标记

TypeScript:将对象条目映射到类型