2017-04-24 79 views
0

你好我试图的JSON对象到一个打字原稿类以改变阵列。然而,每一次我尝试将Json对象属性分配给打字稿属性时,该方法似乎都会崩溃。打字稿JSON对象转换成打字原稿类

打字稿接口

export interface marker { 
    lat: number; 
    lng: number; 
} 

打字稿方法

public markers: marker[]; 

ngOnInit() { 
    this.mapService.GetPhotosById(this.id).subscribe(resultlisting => { 
     this.values = resultlisting; 
     console.log(this.values); //SHOW IN PICTURE 
     this.ChangetoMarkers(this.values); 
    }, error => this.errorMessage = error); 
} 

ChangetoMarkers(someArray: Observable<any[]>) { 

    for (let entry of someArray) { 
     let mark: marker; 
     mark.lat = Number(entry.latitude); //Attempt to convert to number 
     mark.lng = +entry.longitude; //2nd attempt to convert to number 
     this.markers.push(mark); 
    }; 
    console.log(this.markers); //DOES NOT REACH THIS 
} 

地图服务

GetPhotosById(id: string): Observable<any> { 
    return this.http 
     .post(this.config.apiEndpoint + "mapPhotos/" + id) 
     .map(this.extractJson).catch(this.handleErrors); 

}; 
private extractJson(res: Response) { 
    let data = res.json(); 
    return data; 
} 
private handleErrors(error: Response | any) { 
    let errMsg: string; 
    if (error instanceof Response) { 
     const body = error.json() || ''; 
     const err = body.error || JSON.stringify(body); 
     errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
    } else { 
     errMsg = error.message ? error.message : error.toString(); 
    } 
    console.log(errMsg); 
    return Observable.throw(errMsg); 
} 

我研究这个问题,并试图以应用整数投,但它似乎没有不工作。任何建议都会很棒。

+2

这些都不是“JSON对象”,但JavaScript对象。抛出任何异常? – zerkms

+4

你想分配属性没有值的变量,写'让标记:标记= {}',而不是 –

+0

没有抛出异常出奇 – RyeGuy

回答

2

正如毛波佩在他的评论中指出的,您要访问的是没有值的变量的特性。

changeToMarkers(points: Array<{latitude: number, longitude: number}>) { 
    this.markers = entries.map(({latitude: lat, longitude: lng}) => ({ 
    lat, 
    lng 
    })); 

    console.log(this.markers); 
} 

由于反序列化的纬度和经度表示已经是兼容的数值,所以不需要数字转换。

+0

好吧。现在实施您的解决方案..... – RyeGuy

+0

它没有达到console.log(this.markers)语句。 – RyeGuy

+1

@RayGuy会发生什么?它是否达到了订阅?注意为了约定,我稍微改了一些名字,一定要更新你的模板(或者改回名字); –

1

试试这个:

ChangetoMarkers(someArray: any[]) { 
    console.log("array",someArray); 
    for (let entry of someArray) { 
     let mark: marker = {lat: entry.latitude, lng: entry.longitude}; 
     console.log("mark", mark); 
     this.markers.push(mark); 
    }; 
    console.log("markers",this.markers); 
} 

它不像Aluan哈达德的优雅,但它应该让你决定此时它是打破如果由于某种原因,这仍然不能正常工作,伐木在循环之前有一些数组,标记被推之前,以及这个标记之后,以确定问题的确切位置。