如何将数据从JSON API传递到TypeScript模型

时间:2017-02-05 00:46:47

标签: javascript json api angular typescript

在我的服务中,我必须将我的JSON api提供的信息传递给我的模型。这样做的最佳方式是什么?

目前我正在这样做:

import { Attachment } from '.';

export class Contact {
  id: number;
  attachments: Attachment[] = [];

  static fromJSON(data) {
    let contact = new Contact();
    contact.id = data.id;

    // Attachments?
    for(let attachment of data.attachments) {
      contact.attachments.push( Attachment.fromJSON(attachment) );
    }
    return contact;
  }
}

}

有更好的想法吗?

2 个答案:

答案 0 :(得分:1)

如果我理解得很好,您希望获取服务返回的JSON字符串中的信息。

我们说你有以下内容来获取JSON。

   that.db.getTodoListFromServer(this)
                .done(msg => {
                    if (msg != undefined) {
                        //in msg you have your JSON object
                 })
                .fail(msg => {
                 });

在这一点上你可以做两件事

  1. 如果您知道JSON字符串的类结构,则可以像在解决方案中一样逐个元素地直接传递给模型。
  2. 2.-创建一个具有返回的JSON对象结构的接口(typescript支持接口)。在下面的示例中,我们创建了一个接口IToDoModel。因为我们知道返回的JSON与我们的接口具有相同的结构,所以当我们将JSONreturn分配给接口时不会发生错误。

     export interface ToDoModel {
            Id: number;
            ToDo: string;
        }
    
    ...  
    
    that.db.getTodoListFromServer(this)
                .done(msg => {
                     if (msg != undefined) {
                         //this json return a list of IToDoModel
                         var todo: Array<ToDoModel> = msg;
                  })
                .fail(msg => {
                         //Manage Error   
                 });
    

    我希望这可以帮到你

答案 1 :(得分:0)

最简单的方法是直接向Array<Attachment>投射附件。

import { Attachment } from '.';

export class Contact {
  id: number;
  attachments: Attachment[] = [];

  static fromJSON(data) {
    let contact = new Contact();
    contact.id = data.id;

    // cast attachments json to `Array<Attachment>`.
    contact.attachments = <Array<Attachment>>data.attachments;

    return contact;
   }
 }
}