Dart 将 Map<dynamic, dynamic> 转换为 Map<String, List<String>>
Dart convert Map<dynamic, dynamic> to Map<String, List<String>>
如何转换成这样Map
:
Map<dynamic, dynamic> a = {2022-04-10: [8:00, 15:00]}; //No quotes
获得:
Map<String, List<String>> b = {"2022-04-10": ["8:00", "15:00"]};
我试过这样做,但对我不起作用。没有错误,但是如果你调用 print,什么也不会发生:
String str = '{2022-04-10: [8:00, 15:00]}';
final Map<dynamic, dynamic> dynamicMapFromJson = json.decode(str);
Map<String, List<String>> schedule = dynamicMapFromJson.cast<String, List<String>>();
我正在从 Firebase 教授这张地图:
await FirebaseFirestore.instance
.collection('call')
.get()
.then((QuerySnapshot querySnapshot) {
for (var doc in querySnapshot.docs) {
Map<String, List<String>> _schedule = doc.get('schedule');
}
});
你的地图是
Map<dynamic, dynamic> a = {"2022-04-10": ["8:00", "15:00"]};
可以通过两种方式转换
Map<dynamic, dynamic> a = {"2022-04-10": ["8:00", "15:00"]};
Map<String, List<String>> converted = {};
// 1st way:
for (var item in a.keys)
converted[item.toString()] = List<String>.from(a[item]);
// 2nd way:
for (var item in a.keys)
{
List<String> _new = [];
for (var newItem in List.from(a[item]))
_new.add(newItem.toString());
converted[item.toString()] = _new;
}
您可以使用正则表达式的魔力 “它不是真正完美的表达式” 但它适用于您的情况
在这里你可以匹配日期 yyyy-mm-dd 和 hh: mm 然后用引号替换
String str = '{2022-04-10: [8:00, 15:00]}';
var stringify = str.replaceAllMapped(RegExp("([0-9]{4}-[0-9]{2}-[0-9]{2})|([0-9]{0,2}:[0-9]{0,2})"), (match) => "\"${match.group(0)}\"");
//This step just for replace ":" with normal :
stringify = stringify.replaceAll("\":\"",":");
print("value: $stringify");
final Map dynamicMapFromJson = json.decode(stringify);
print(dynamicMapFromJson);
如何转换成这样Map
:
Map<dynamic, dynamic> a = {2022-04-10: [8:00, 15:00]}; //No quotes
获得:
Map<String, List<String>> b = {"2022-04-10": ["8:00", "15:00"]};
我试过这样做,但对我不起作用。没有错误,但是如果你调用 print,什么也不会发生:
String str = '{2022-04-10: [8:00, 15:00]}';
final Map<dynamic, dynamic> dynamicMapFromJson = json.decode(str);
Map<String, List<String>> schedule = dynamicMapFromJson.cast<String, List<String>>();
我正在从 Firebase 教授这张地图:
await FirebaseFirestore.instance
.collection('call')
.get()
.then((QuerySnapshot querySnapshot) {
for (var doc in querySnapshot.docs) {
Map<String, List<String>> _schedule = doc.get('schedule');
}
});
你的地图是
Map<dynamic, dynamic> a = {"2022-04-10": ["8:00", "15:00"]};
可以通过两种方式转换
Map<dynamic, dynamic> a = {"2022-04-10": ["8:00", "15:00"]};
Map<String, List<String>> converted = {};
// 1st way:
for (var item in a.keys)
converted[item.toString()] = List<String>.from(a[item]);
// 2nd way:
for (var item in a.keys)
{
List<String> _new = [];
for (var newItem in List.from(a[item]))
_new.add(newItem.toString());
converted[item.toString()] = _new;
}
您可以使用正则表达式的魔力 “它不是真正完美的表达式” 但它适用于您的情况 在这里你可以匹配日期 yyyy-mm-dd 和 hh: mm 然后用引号替换
String str = '{2022-04-10: [8:00, 15:00]}';
var stringify = str.replaceAllMapped(RegExp("([0-9]{4}-[0-9]{2}-[0-9]{2})|([0-9]{0,2}:[0-9]{0,2})"), (match) => "\"${match.group(0)}\"");
//This step just for replace ":" with normal :
stringify = stringify.replaceAll("\":\"",":");
print("value: $stringify");
final Map dynamicMapFromJson = json.decode(stringify);
print(dynamicMapFromJson);