【问题标题】:Angular convert ids of http request from long to stringAngular 将 http 请求的 id 从 long 转换为 string
【发布时间】:2021-01-11 15:04:54
【问题描述】:

在我的后端,我的 ID 很长。遗憾的是 Angular 或更好的 Javascript 不太喜欢长 id 并且会舍入大量数字。由于这对于 ID 来说不是最优的,因此我需要在将其解析为 json 对象之前将其从 long 转换为字符串:

this.http.get<Player>(this.getUrl() + '/' + id);

我的播放器类:

export class Player {
   id: string;
   name: string;
}

如何在从它们创建对象之前将 id 转换为字符串?

这是后端答案:

{ "id": 12345, "name": "Test" }

这是我在转换为对象之前需要将其转换为的:

{ "id": "12345", "name": "Test" }

【问题讨论】:

  • 使用管道和地图来改变响应
  • 您可以使用 RxJS map 运算符来转换响应:this.http.get(this.getUrl() + '/' + id).pipe(map(p =&gt; ({...p, id: String(p.id)}) as Player))。
  • 我认为这一点为时已晚,因为它已经映射到一个对象并且 ID 已经四舍五入了:/
  • @julien-100000:“四舍五入”到底是什么意思?期望值是多少,四舍五入到什么程度?
  • 预期:9180021352890858370,实际:9180021352890858000 这就是原因:stackoverflow.com/questions/5525783/…

标签: json angular http


【解决方案1】:

使用管道和映射来改变响应;

this.http.get(this.getUrl() + '/' + id).pipe(map((player) => {
  player.id = ""+player.id;
  return player;
}));

【讨论】:

  • 我认为问题在于转换为对象后这样做还不晚,因为那时id已经四舍五入了:/
  • 那么不要把它类型转换成直接进入get函数,在pipe map之后做
【解决方案2】:

你可以使用toString()方法

this.http.get<Player>(this.getUrl() + '/' + id).pipe(map((player) => {
   player.id = player.id.toString();
   return player;
}));

【讨论】:

  • 我认为问题在于转换为对象后这样做还不晚,因为那时id已经四舍五入了:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 2018-05-29
  • 2019-05-14
  • 1970-01-01
  • 2021-02-06
  • 2017-08-20
相关资源
最近更新 更多