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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:31:17