【发布时间】:2017-06-13 23:25:30
【问题描述】:
我在 Angular2 打字稿项目中发现了一件奇怪的事情。我有来自具有“级别”类型的网络服务的对象(它具有与来自网络服务的 Json 相同的属性)。在运行时,来自 web 服务的 Level 属性的开头有大写字母(Pascal 大小写),而我的 typescript 项目中的属性有小字母(在浏览器的开发人员调试工具中可见)。
我想我需要以某种方式将 json 属性映射到某个地方,而不是通过到处写“as Level[]”来进行强制转换。如何正确操作?
关于我应该发布一些代码的问题的更新:
(控制器)
ngOnInit(): void {
this.levelsObservable = this.levelsService.getAllLevels();
this.levelsObservable.subscribe(
data => console.log(data)
);
}
(服务)
observable : Observable<Response>;
getAllLevels(): Observable<Level[]> {
this.observable = this.achievementsService.getAllAchievements(this.allLevelsUrlPart);
return this.observable
.map((response: Response) => {
const srcData = response.json() as Level[];
return srcData;})
.catch(error => this.handleError(error));}
getAllAchievements(detailPath): Observable<Response> {
// prepare request url and header
this.specificUrl = this.webServiceUrl + detailPath;
this.headers.append('Content-type', 'application/json');
let options = new RequestOptions({ headers: this.headers });
this.result = this.http.get(this.specificUrl, options)
.catch(error => this.handleError(error));
return this.result;}
更新: 我在下面的一个答案的帮助下稍微完善了我的代码(上面没有集成,因为对于解决主要问题不是必需的)。 我尝试使用下面的其他答案来解决骆驼案例,但它不起作用(我有一个数组,数组中是具有属性的对象,但迭代器方法无法访问对象的属性)。
更新: 我终于成功了(!):) 我稍微缩短了这篇文章,现在将在下面发布我的解决方案。它肯定不是最漂亮的,但我很高兴在搜索了几个小时后得到了一个。感谢所有帮助我的人在这里的伟大和投入!
【问题讨论】:
-
用我们无能为力的代码更新您的帖子
-
您需要编写一个函数或方法,从 JSON 中获取原始对象并将其转换为
Level。请注意,SO 问题中应该有一个minimal reproducible example,而不仅仅是指向其他地方的整个代码库的链接。 -
谢谢你,jonrsharpe。你能解释一下怎么做吗?那么我在哪里编写这个函数,我在哪里调用它最好呢?我会尝试做一个最小的例子
标签: json angular typescript mapping