如何将地图数据转换为自定义列表(嵌套,递归)?

问题描述 投票:0回答:1

我要转换...。发件人:转换地图(字符串,动态)收件人:条目(字符串标题,列出子项)

地图对象:

Map<String, dynamic> mapData = {
  "A": {
        "B": {
               "C": 
                  {
                    "data1": "some data1",
                    "data2": "some data2",
                    "data3": "some data3",
                    "data4": "some data 4"  
                  }
             }
  },
  .......  
};
]

数据= generateRecursiveList(mapData);

//我想要每个输出对象的数据

List<Entry> finalList = new List<Entry>();


List<Entry> generateRecursiveList(Map group){
var keylist = group.keys.toList();
var valueslist = group.values.toList();

for(int i=0; i<keylist.length;i++){
  Entry entry = new Entry();
  entry.title = keylist[i].toString();
  List<Entry> childEntries = new List<Entry>(); 
  for(int j=0; i<valueslist[j].length;j++){
     if(valueslist[j] is Map){
       childEntries.add(generateRecursiveList(valueslist[j]));  // Recursive calling the same function to get the children
    // I am not sure how i will get this children now
    entry.children = childEntries;
     }    
  }
// This is also I am not sure how to add the entries
   finalEntries.add(entry);
}
}

输出对象:

final List<Entry> data = <Entry>[
  Entry( 'A', <Entry>[
    Entry( 'B',<Entry>[
         Entry( 'C',<Entry>[
                     Entry( 'some data 1'), 
                     Entry( 'some data 2'),
                     Entry( 'some data 3'),
                     Entry( 'some data 4')
                    ])
          ])
    ]), 
  ....
];

我试图编写一个递归函数,但无法将这些嵌套映射转换为列表。

flutter dart
1个回答
0
投票

您可以执行以下操作:

class Entry {
  Entry({this.title, this.children});

  String title;
  List<Entry> children;
}

List<Entry> fromJson(Map<String, dynamic> json) {
  final keys = json.keys.toList();
  final res = List<Entry>();
  for (final key in keys) {
    final entry = Entry(title: key, children: fromJson(json[key]));
    res.add(entry);
  }
  return res;
}

编辑:由于Dart 2.3for collections一样,fromJson也可以这样写:

List<Entry> fromJson(Map<String, dynamic> json) {
  return [
    for (final key in json.keys)
      Entry(title: key, children: fromJson(json[key]))
  ];
}
© www.soinside.com 2019 - 2024. All rights reserved.