我要转换...。发件人:转换地图(字符串,动态)收件人:条目(字符串标题,列出子项)
地图对象:
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')
])
])
]),
....
];
我试图编写一个递归函数,但无法将这些嵌套映射转换为列表。
您可以执行以下操作:
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.3与for collections
一样,fromJson
也可以这样写:
List<Entry> fromJson(Map<String, dynamic> json) {
return [
for (final key in json.keys)
Entry(title: key, children: fromJson(json[key]))
];
}