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

