json - Angular 2+ - 将 JSON 解析为数字
问题描述
我想使用Angular Google Maps在 Google Maps 上放置一个标记,我的坐标来自 JSON 文件,在 Angular 中解析时它变成了一个字符串。
Angular Google Maps 不支持坐标编号的字符串。所以它必须是数字。
标记.json
[
{
"id":"1",
"lat":"13.751814",
"lon":"100.501060"
},
{
"id":"2",
"lat":"13.738445",
"lon":"100.516805"
},
{
"id":"3",
"lat":"13.730209",
"lon":"100.779991"
}
]
maps.componenet.ts
import { Component, OnInit } from '@angular/core';
import {Http, Response} from '@angular/http';
@Component({
selector: 'app-maps',
templateUrl: './maps.component.html',
styleUrls: ['./maps.component.css']
})
export class MapsComponent implements OnInit {
private data;
constructor(private http:Http){
}
ngOnInit(){
this.getData();
}
getData(){
this.http.get('/localhost/marker.json')
.subscribe(res => this.data = res.json());
}
}
maps.component.html
<agm-map [latitude]="13.359665" [longitude]="101.035913" [zoom]="6">
<ng-container *ngFor="let list of data">
<agm-marker [latitude]="list.lat" [longitude]="list.lon"></agm-marker>
</ng-container>
</agm-map>
我试过像这样使用 parseFloat (是的,它不起作用)
<agm-marker [latitude]="parseFloat(list.lat)" [longitude]="parseFloat(list.lon)"></agm-marker>
我正在考虑使用parseInt
内部maps.component.ts
文件,但我不确定该放在哪里。
可能有人帮助我或指导我如何解决这个问题。请让我知道我是否提供了足够的信息。
谢谢!
解决方案
一种更清洁、更高效的方法是处理一次数据并以不需要任何其他准备的方式将其提供给视图:
getData(){
this.http.get('/localhost/marker.json')
.map(res => res.json())
.map((data: any[]) => data.map(
({ lon, lat, ...props }) => ({ lon: +lon, lat: +lat, ...props })
))
.subscribe(data => {
this.data = data;
});
}
如果marker.json 除了列出的props 之外没有其他props,...props
可以替换为known id
property。
推荐阅读
- rust - 有没有办法绕过原子操作的成本?
- node.js - 使用node.js在sqlite3中一次插入多个依赖表
- python - 通过将每一列重复一定次数来创建数据框
- python - 比较两个数组时出错:DeprecationWarning: elementwise comparison failed; 这将在未来引发错误
- python - 如何在 Cloud Function (Python) 中初始化 Firebase Admin SDK
- r - R:尝试在 filter.data.frame 中使用零长度变量名
- c++ - C++ 有没有办法为同一个参数使用不同的类型来初始化一个类?
- python - 如何在 Python 和 BeautifulSoup 中过滤带有类的标签?
- react-native - 按下导航栏上的按钮时导航到其他 StackNavigator 屏幕
- excel - 如何在自定义excel日历中的特定日期和时间范围内获取特定活动