Flutter如何从API返回的JSON数组中提取所有经纬度数据
Flutter 提取API响应中经纬度的实现方法
方式1:快速提取(无需定义数据模型,适合临时处理场景)
直接操作解析后的动态列表即可,代码如下:
import 'dart:convert'; // 假设apiResponseStr是你调用接口拿到的JSON字符串 List<dynamic> pollList = jsonDecode(apiResponseStr); // 提取所有经纬度存入新列表 List<Map<String, double>> coordinates = pollList.map((item) { return { 'lat': (item['Lat'] as num).toDouble(), 'long': (item['Long'] as num).toDouble(), }; }).toList();
后续直接遍历coordinates就能拿到所有纬度和经度值。
方式2:规范解析(定义数据模型,推荐生产环境使用)
先创建对应字段的Dart模型,避免后续逻辑出现类型异常,也方便扩展其他字段的处理:
第一步:定义Poll数据模型
class Poll { final String pollId; final double long; final double lat; final double speed; final bool isGPSAvailable; final String status; final bool ign; final double distance; final double direction; Poll({ required this.pollId, required this.long, required this.lat, required this.speed, required this.isGPSAvailable, required this.status, required this.ign, required this.distance, required this.direction, }); factory Poll.fromJson(Map<String, dynamic> json) { return Poll( pollId: json['PollId'] as String, long: (json['Long'] as num).toDouble(), lat: (json['Lat'] as num).toDouble(), speed: (json['Speed'] as num).toDouble(), isGPSAvailable: json['IsGPSAvailable'] as bool, status: json['Status'] as String, ign: json['Ign'] as bool, distance: (json['Distance'] as num).toDouble(), direction: (json['Direction'] as num).toDouble(), ); } }
第二步:解析并提取经纬度
import 'dart:convert'; // 把JSON字符串解析为Poll对象列表 List<dynamic> jsonList = jsonDecode(apiResponseStr); List<Poll> pollList = jsonList.map((json) => Poll.fromJson(json)).toList(); // 提取经纬度 List<Map<String, double>> coordinates = pollList.map((poll) { return { 'lat': poll.lat, 'long': poll.long, }; }).toList();
注意点
- 代码中用
num转double是为了兼容接口返回整数类型的数值,避免类型强转报错。 - 如果你用的地图SDK有自带的坐标类(比如百度地图、高德地图的LatLng类),可以直接把经纬度塞到对应类里,不用自己存Map。
内容的提问来源于stack exchange,提问作者Hasnain Saeed
相关产品推荐
相关产品推荐

