如何在Angular 4中将JSON响应映射到Model

时间:2018-01-16 08:57:33

标签: json angular angular4-httpclient

我已经尝试了很多但是我无法将端点响应映射到我的模型。我正在使用HttpClient和Angular4。 我从服务中获取数据,但未正确映射到我的模型类。

我有以下JSON服务正在返回:

{
    "result": [
        {
            "id": "1",
            "type": "User",
            "contactinfo": {
                "zipcode": 1111,
                "name": "username"
            }
        }
    ]
}

我在typescript中创建了一个模型,我想将其映射到json响应:

export interface result {
            zipcode: number;
            name: string;
}

这就是我调用JSON端点的方式。

result : string[] = [];

constructor(private http: HttpClient) {    }

public getList(): result[] {
        this.http.get<result[]>('url...', { headers: this.headers }).subscribe(

            data => {
             // 1. Data is returned - Working
                console.log('data: ' + data); 
                this.result= data;

                // This is the problem. My data is not mapped to my model. If I do following a null is returned
                console.log('data mapped: ' + this.result[0].name);
            },
            (err: HttpErrorResponse) => {
    // log error
            }
        );

        return this.result;
    }

2 个答案:

答案 0 :(得分:7)

您需要导入组件中的界面

import { result } from '.result';

您的界面应该如下,

interface RootObject {
  result: Result[];
}

interface Result {
  id: string;
  type: string;
  contactinfo: Contactinfo;
}

interface Contactinfo {
  zipcode: number;
  name: string;
}

并将结果类型更改为

result : result;

并将结果指定为

this.result = data;

您可以使用http://www.jsontots.com/基于JSON

创建界面

答案 1 :(得分:0)

您的&#34;数据&#34;是一个对象,具有属性&#34;结果&#34;。 result []有一个名为&#34; contactInfo&#34;的属性。在contactInfo中你有你想要的数据,所以

//you have no model, so NOT get<result[]>
this.http.get('url...', { headers: this.headers }).subscribe(
            data => {
                this.result= data.result[0].contactInfo;
            }