Flutter技术咨询:如何从指定嵌套列表中获取modelName字段?
在Flutter中获取设备列表的modelName字段
首先将你提供的非标准JSON结构转换为Dart可处理的List<Map<String, dynamic>>:
final List<Map<String, dynamic>> deviceData = [ { "serialNumber": "VNPT29102021", "modelName": "GW040H", "deviceMac": "d4:9a:a0:91:55:c8", "deviceType": 3, "deviceTypeName": "ONTMESH", "ipAddr": "192.168.1.1", "deviceList": [ { "modelName": "EW12ST000T0004", "deviceMac": "cc:71:90:4a:24:f4", "serialNumber": "1291111264A24F2", "ipAddr": "192.168.1.3", "deviceType": 1 }, { "modelName": "EW12ST000T0004", "deviceMac": "cc:71:90:4a:25:08", "serialNumber": "1291111264A2506", "ipAddr": "192.168.1.4", "deviceType": 2 } ], "authenString": "", "dbVersion": 1, "cookies": "" } ];
获取外层设备的modelName
直接通过键名访问,支持单个获取或批量遍历:
// 获取第一个外层设备的modelName String outerModelName = deviceData[0]['modelName'] as String; print(outerModelName); // 输出: GW040H // 批量获取所有外层设备的modelName List<String> outerModelNames = deviceData.map((device) => device['modelName'] as String).toList();
获取内层deviceList中的modelName
需要先定位到子列表,再遍历提取:
// 获取第一个外层设备下所有子设备的modelName List<Map<String, dynamic>> innerDevices = deviceData[0]['deviceList'] as List<Map<String, dynamic>>; List<String> innerModelNames = innerDevices.map((device) => device['modelName'] as String).toList(); print(innerModelNames); // 输出: [EW12ST000T0004, EW12ST000T0004] // 遍历所有外层设备,收集全部子设备的modelName List<String> allInnerModelNames = []; for (var outerDevice in deviceData) { List<Map<String, dynamic>> innerList = outerDevice['deviceList'] as List<Map<String, dynamic>>; allInnerModelNames.addAll(innerList.map((d) => d['modelName'] as String)); }
安全处理建议
如果字段可能为空,添加空值判断避免报错:
// 可空类型接收 String? outerModelName = deviceData[0]['modelName'] as String?; // 带默认值的安全获取 String safeModelName = deviceData[0]['modelName'] ?? '未知型号';
如果数据来自网络JSON字符串,需先解析:
import 'dart:convert'; String jsonString = '你的标准JSON字符串(键需带双引号)'; List<Map<String, dynamic>> deviceData = jsonDecode(jsonString) as List<Map<String, dynamic>>;
内容的提问来源于stack exchange,提问作者natt
相关产品推荐
相关产品推荐

