如何在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
相关产品推荐
相关产品推荐

