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

Flutter中如何解析包含动态对象键的JSON数组

Flutter 动态键JSON结构解析方案

实现思路

你给出的JSON结构中,data数组下每个对象仅包含1个动态生成的键,值为员工数据数组。核心解析逻辑是:遍历每个对象的keys属性获取动态键名,再将键对应的值解析为固定结构的员工列表即可,无需提前硬编码所有可能的动态键。

代码实现

1. 定义内层员工数据实体

class EmpItem {
  final int id;
  final int empId;

  EmpItem({required this.id, required this.empId});

  factory EmpItem.fromJson(Map<String, dynamic> json) {
    return EmpItem(
      id: json['id'],
      empId: json['emp_id'],
    );
  }
}

2. 定义动态键分组实体

用于存储动态键名和对应的员工列表:

class StatusGroup {
  // 存储动态生成的键名,如accepted、negotiate
  final String statusName;
  // 存储键对应的员工列表
  final List<EmpItem> items;

  StatusGroup({required this.statusName, required this.items});
}

3. 定义外层响应实体与核心解析逻辑

import 'dart:convert';

class ApiResponse {
  final String status;
  final List<StatusGroup> data;

  ApiResponse({required this.status, required this.data});

  factory ApiResponse.fromJson(Map<String, dynamic> json) {
    final resStatus = json['status'] as String;
    final rawDataList = json['data'] as List;
    List<StatusGroup> parsedData = [];

    for (var rawItem in rawDataList) {
      final itemMap = rawItem as Map<String, dynamic>;
      // 获取动态键名(若单个对象可能有多个动态键,可遍历itemMap.keys处理)
      final dynamicKey = itemMap.keys.first;
      // 解析对应员工列表
      final rawEmpList = itemMap[dynamicKey] as List;
      final empList = rawEmpList.map((e) => EmpItem.fromJson(e)).toList();
      parsedData.add(StatusGroup(statusName: dynamicKey, items: empList));
    }

    return ApiResponse(status: resStatus, data: parsedData);
  }
}

使用示例

拿到接口返回的JSON字符串后,直接调用解析方法即可:

// 假设responseBody为接口返回的JSON字符串
final Map<String, dynamic> jsonData = jsonDecode(responseBody);
ApiResponse response = ApiResponse.fromJson(jsonData);

// 遍历获取所有动态键和对应数据
for (var group in response.data) {
  print('状态类型:${group.statusName}');
  print('对应员工数量:${group.items.length}');
}

拓展说明

如果data数组下的单个对象可能包含多个动态键,只需将itemMap.keys.first替换为遍历itemMap.keys的逻辑,逐个处理每个键值对即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:36:02