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

如何用Dart遍历levels列表并打印所有HashMap值?

Dart遍历嵌套HashMap并打印所有值的实现方案

看起来你已经搞定了HTTP请求和数据解析的核心部分,接下来只需要处理嵌套HashMap的遍历逻辑就行。结合你给出的JSON结构和现有代码,我整理了两种可行的实现方式:

方式一:基于现有Level类的遍历

假设你的Level类已经正确解析了JSON中的嵌套Map(比如有一个items属性用来存储外层的键值对),可以这样修改循环逻辑:

for (var level in res.levels) {
  // 获取Level对象中存储的嵌套HashMap
  var nestedMap = level.items; // 替换成你Level类中实际存储Map的属性名
  // 遍历HashMap的所有值
  for (var item in nestedMap.values) {
    // 打印单个字段
    print('id: ${item['id']}, level_no: ${item['level_no']}');
    // 如果需要打印整个Map对象,直接用下面这行
    // print(item);
  }
}

方式二:简化类型定义(更直接)

如果你的Level类只是用来承载那个嵌套Map,其实可以直接把DataResponse中的levels类型改为List<Map<String, dynamic>>,这样省去额外的Level类定义,代码会更简洁:

修改DataResponse类

@JsonSerializable()
class DataResponse extends BaseResponse {
  List<Map<String, dynamic>> levels = []; // 直接用Map类型替代Level类
  DataResponse();
  factory DataResponse.fromJson(Map<String, dynamic> json) => _$DataResponseFromJson(json);
  Map<String, dynamic> toJson() => _$DataResponseToJson(this);
}

遍历代码

for (var levelMap in res.levels) {
  // 直接遍历每个Map的values集合
  for (var value in levelMap.values) {
    print('id: ${value['id']}, level_no: ${value['level_no']}');
    // 打印完整Map对象
    // print(value);
  }
}

逻辑说明

从你提供的JSON示例来看,levels数组中的每个元素都是一个外层HashMap,键是"1"/"2"/"3",对应的值是包含id和level_no的子Map。所以我们需要两层遍历:

  • 第一层遍历res.levels列表,拿到每个外层HashMap
  • 第二层遍历外层HashMap的values集合,就能获取到所有的子Map,进而打印你需要的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:02:31