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

Flutter中如何正确访问API返回的嵌套JSON数据结构?

问题原因与解决方法

问题根源

你遍历data['sun']的方式有误。在Dart中,直接对Map使用for-in循环时,迭代的是Map的键(key),而非键值对。也就是说你的代码里item实际是字符串"r1"、"r2"、"r3",用字符串去取item['r2']自然会返回null。

解决方法

1. 直接获取目标值(最简便,若仅需r2的sunrise)

如果不需要遍历所有数据,直接通过键路径访问即可:

final Map<String, dynamic> data = jsonDecode(response.body);
print(data['sun']['r2']['sunrise']); // 输出1698512201

2. 正确遍历所有sun数据

如果需要遍历sun下的所有子对象,有两种方式:

方式一:遍历Map的entries(包含键和值)
final Map<String, dynamic> data = jsonDecode(response.body);
final sunMap = data['sun'] as Map<String, dynamic>;

for (final entry in sunMap.entries) {
  String key = entry.key; // 即"r1"、"r2"、"r3"
  dynamic sunData = entry.value;
  print('$key的日出时间:${sunData['sunrise']}');
  // 若要单独处理r2:
  if (key == 'r2') {
    print(sunData['sunrise']); // 输出1698512201
  }
}
方式二:遍历Map的values(仅获取值)
final Map<String, dynamic> data = jsonDecode(response.body);
final sunValues = (data['sun'] as Map<String, dynamic>).values;

for (final sunData in sunValues) {
  print(sunData['sunrise']); // 依次输出三个日出时间
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:42:08