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
相关产品推荐
相关产品推荐

