繁体   English   中英

使用map()将json数据转换为对象

[英]using map() to convert json data to an object

我有数据服务,它将假数据作为json返回(私有嘲笑数据函数)。 由于json数据结构与MyPerson对象匹配,因此我试图使用.map(res => res as MyPerson));简单地将该json数据转换为MyPerson对象.map(res => res as MyPerson)); 这是行不通的,因为我遇到错误,无法将数据转换为MyPerson对象。

我的问题是:如何使用map函数将此json数据映射到MyPerson对象?

@Injectable()
export class DataService {
    person: MyPerson;

    constructor(private http: Http) {
        this.person = new MyPerson();
    }

    getData(): Observable<MyPerson> {
        return Observable.from([this.mockData()]
            .map(res => res as MyPerson)); /// ERROR?
    }

    private mockData() {
        return {
            "Id": 100,
            "firstName": "John",
            "lastName": "Conor",         
            "address": {
                "postalAddress": {
                    "Streetline": "Long street",
                    "Suburb": "some suburb",
                    "City": "Boston",
                    "Province": "MA"
                },
                "residentialAddress": {
                    "Streetline": "Short street",
                    "Suburb": "my suburb",
                    "City": "New Jersey",
                    "Province": "N/A"
                }
            },
            "Status": OK            
        }
    };
}

 export class MyPerson {
        Id: number;    
        firstName: string;
        lastName: string;    
        address: {
            residentalAddress: Address;
            postalAddress: Address;
        }    
    }

export class Address {    
    public StreetAddress: string;
    public Suburb: string;
    public City: string;
    public Province: string;

    constructor(street: string, suburb: string, city: string, province: string){
        this.StreetAddress = street;
        this.Suburb = suburb;
        this.City = city;
        this.Province = province;
    }
}

您在MyPerson类的residentialAddress中缺少i ,并且在模拟数据中使用StreetLine而不是StreetAddress 固定在堆叠闪电战中

如果您定义私有嘲笑数据()的返回类型:MyPerson,它将告诉Typescript您知道并可以控制要返回的数据,而无需通过推断类型来弄清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM