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

如何在Dart/Flutter中实现JSON到指定结构Map的转换

Dart/Flutter JSON转指定结构Map实现方案

实现逻辑

  • 第一步:使用dart:convert库的jsonDecode方法解析原始JSON字符串,得到初始Map结构
  • 第二步:遍历kabupaten字段对应的数组元素,以jec_propinsi_id作为外层Map的key
  • 第三步:每个省份key对应的value为内层Map,内层以jec_kabupaten_id为key,name为value存储

完整示例代码

import 'dart:convert';

void main() {
  // 原始JSON字符串
  String rawJson = '''
  {"kabupaten": [
        {
            "jec_kabupaten_id": "71",
            "jec_propinsi_id": "8",
            "name": "Aceh Barat"
        },
        {
            "jec_kabupaten_id": "76",
            "jec_propinsi_id": "8",
            "name": "Aceh Barat Daya"
        }, 
        {
            "jec_kabupaten_id": "91",
            "jec_propinsi_id": "9",
            "name": "Medan"
        }, 
         {
            "jec_kabupaten_id": "92",
            "jec_propinsi_id": "9",
            "name": "Sinabung"
        }
    ]}
  ''';

  // 解析JSON得到原始数据
  Map<String, dynamic> originMap = jsonDecode(rawJson);
  List<dynamic> kabupatenList = originMap['kabupaten'];

  // 初始化结果Map
  Map<String, Map<String, String>> result = {};

  // 遍历处理每一项
  for (var item in kabupatenList) {
    String provId = item['jec_propinsi_id'];
    String kabId = item['jec_kabupaten_id'];
    String kabName = item['name'];

    // 如果当前省份id不存在于结果中,先初始化内层Map
    if (!result.containsKey(provId)) {
      result[provId] = {};
    }
    // 写入县id和对应的名称
    result[provId]![kabId] = kabName;
  }

  // 打印验证结果
  print(result);
}

输出结果说明

运行代码后得到的result就完全符合你需要的结构:

{
  "8": {
    "71": "Aceh Barat",
    "76": "Aceh Barat Daya"
  },
  "9": {
    "91": "Medan",
    "92": "Sinabung"
  }
}

你示例期望里的"68":"Aceh Besar"在原始JSON中没有对应数据,所以不会出现在结果中,新增对应原始数据后会自动生成对应条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:08