You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart无法访问API返回JSON字段并添加至Google Maps Marker

问题排查与解决方案

1. 先确认API响应的JSON结构

先打印完整解析后的数据,验证records数组是否存在,以及fields内的字段名是否和你代码中使用的完全一致:

final response = await http.get(Uri.parse('你的API地址'));
final data = jsonDecode(response.body);
print('完整响应数据: $data'); // 查看records数组层级、fields内字段名是否正确

常见问题:字段名拼写错误(比如把postal_code写成postalCode)、records嵌套层级不对(比如需要data['results']['records']而非直接data['records'])、API返回的records本身为空数组。

2. 修正遍历与Marker创建逻辑

确保正确遍历records数组,并安全访问目标字段:

Set<Marker> markers = {};

// 先校验records的合法性
if (data.containsKey('records') && data['records'] is List) {
  List records = data['records'];
  for (var record in records) {
    // 校验当前record的fields及目标字段是否存在
    if (record.containsKey('fields') &&
        record['fields'].containsKey('postal_code') &&
        record['fields'].containsKey('latitude') &&
        record['fields'].containsKey('longitude')) {
      
      String postalCode = record['fields']['postal_code'];
      // 处理经纬度的类型转换,避免API返回字符串类型导致报错
      double lat = double.parse(record['fields']['latitude'].toString());
      double lon = double.parse(record['fields']['longitude'].toString());
      
      print('邮编: $postalCode, 纬度: $lat, 经度: $lon'); // 验证字段值是否正确
      
      Marker marker = Marker(
        markerId: MarkerId(postalCode),
        position: LatLng(lat, lon),
        infoWindow: InfoWindow(title: postalCode),
      );
      
      markers.add(marker);
      print('当前Marker数量: ${markers.length}'); // 观察数量是否正常增长
    } else {
      print('当前record缺少必要字段: $record');
    }
  }
} else {
  print('响应中不存在合法的records数组');
}

3. 检查getCountry方法的问题

如果getCountry是你封装的方法,重点排查:

  • 方法内部是否正确处理异步逻辑(API调用需加await,否则会提前执行后续代码)
  • 方法内的JSON解析路径是否和实际响应匹配
  • 是否在方法内重新创建了Marker集合,导致外部引用的集合始终为空

4. 类型转换注意事项

部分API返回的经纬度可能是字符串类型,直接强转double会报错,建议先转字符串再解析;如果API返回数字类型,可直接强转:

// 数字类型直接强转
double lat = record['fields']['latitude'] as double;

内容的提问来源于stack exchange,提问作者CODERjack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 06:54:35