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

Flutter/Dart中如何从HTTP响应提取run_hyperlink数据

在Flutter/Dart中提取HTTP响应里的run_hyperlink内容

需求说明

在Flutter/Dart开发场景下,需从HTTP响应的JSON数据中,提取每个ListNode对象内run_hyperlink中的classid、id、mad_key字段,整理为列表形式用于后续列表项展示。目前已通过jsonDecode(response.body)解析响应,可获取到data['RESPONSE']['GenericListAnswer']['ListNode']数据。

响应数据结构示例

"ListNode":[
        {
          "id":"2",
          "mad_key":"32835",
          "is_custom":"0",
          "is_locked":"0",
          "is_inactive":"1",
          "run_hyperlink":{
            "classid":"25510",
            "id":"2",
            "mad_key":"32835"
          },
          "field":[
            {
              "field_name":"code",
              "col_index":"1",
              "field_value":"LE-0000000002",
              "mad_key":"0",
              "id":"0"
            },
            {
              "field_name":"common_desc_0",
              "col_index":"2",
              "field_value":"test_01",
              "mad_key":"0",
              "id":"0"
            },
            {
              "field_name":"id_Org",
              "col_index":"3",
              "field_value":"01_01_04_01_SA - Shah Alam",
              "mad_key":"100377",
              "id":"100055"
            },
            {
              "field_name":"dateReported",
              "col_index":"4",
              "field_value":"18/09/2020",
              "mad_key":"0",
              "id":"0"
            }
          ]
        }
]

当前代码

final data = jsonDecode(response.body);

print(data['RESPONSE']['GenericListAnswer']['ListNode']);

解决方案

1. 基础提取方式(生成Map列表)

直接遍历ListNode,提取每个节点中run_hyperlink的目标字段,生成Map列表:

final data = jsonDecode(response.body);
// 获取ListNode数组
final List<dynamic> listNodes = data['RESPONSE']['GenericListAnswer']['ListNode'];
// 提取指定字段生成新列表
final List<Map<String, String>> hyperlinkList = listNodes.map((node) {
  final Map<String, dynamic> runHyperlink = node['run_hyperlink'];
  return {
    'classid': runHyperlink['classid'],
    'id': runHyperlink['id'],
    'mad_key': runHyperlink['mad_key'],
  };
}).toList();

// 验证结果
print(hyperlinkList);

2. 空安全处理

如果run_hyperlink可能为null,可添加空判断避免异常:

final data = jsonDecode(response.body);
final List<dynamic> listNodes = data['RESPONSE']['GenericListAnswer']['ListNode'];

final List<Map<String, String>?> hyperlinkList = listNodes.map((node) {
  final dynamic runHyperlink = node['run_hyperlink'];
  if (runHyperlink == null) {
    // 此处可返回默认值或null,后续过滤
    return null;
  }
  return {
    'classid': runHyperlink['classid'],
    'id': runHyperlink['id'],
    'mad_key': runHyperlink['mad_key'],
  };
})
.where((item) => item != null) // 过滤掉null项
.toList();

3. 转换为实体类(规范开发)

定义实体类来封装数据,更利于后续维护:

class Hyperlink {
  final String classid;
  final String id;
  final String madKey;

  Hyperlink({
    required this.classid,
    required this.id,
    required this.madKey,
  });

  // 从Map转换为实体对象
  factory Hyperlink.fromMap(Map<String, dynamic> map) {
    return Hyperlink(
      classid: map['classid'] as String,
      id: map['id'] as String,
      madKey: map['mad_key'] as String,
    );
  }
}

然后转换列表:

final data = jsonDecode(response.body);
final List<dynamic> listNodes = data['RESPONSE']['GenericListAnswer']['ListNode'];

final List<Hyperlink?> hyperlinkList = listNodes.map((node) {
  final Map<String, dynamic>? runHyperlink = node['run_hyperlink'];
  if (runHyperlink == null) return null;
  return Hyperlink.fromMap(runHyperlink);
})
.where((item) => item != null)
.toList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:45:36