我无法将Map<String, dynamic>转换为Map<String, Map<String, String>。做这件事最好的方法是什么?
请注意,我在analysis_options.yaml中使用的是高级分析选项
analyzer:
enable-experiment:
- extension-methods
strong-mode:
implicit-casts: false
implicit-dynamic: false我试过了
var de = Map<String, Map<String, String>>.from((json.decode(await rootBundle.loadString('lang/de.json'))) as Map<String, dynamic>);和
var de = (json.decode(await rootBundle.loadString('lang/de.json')) as Map<String, dynamic>).cast<String, Map<String, String>>();和
var de = Map.castFrom<String, dynamic, String, Map<String, String>>((json.decode(await rootBundle.loadString('lang/de.json'))) as Map<String, dynamic>);所有尝试都引发了以下运行时错误:type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Map<String, String>' in type cast
最好的方法是什么?我认为这可以通过迭代映射来完成,但是如果这些映射非常大,这将是一个昂贵的操作。有没有办法在不迭代的情况下转换它们?
发布于 2021-06-06 18:03:54
在处理这样的嵌套数据时,我不相信有一种方法可以转换为适当的类型。
这里有一个类似的关于转换嵌套列表的讨论:https://github.com/dart-lang/language/issues/1574
我认为在这种情况下,以某种方式迭代数据是唯一可以做的事情。
一种可能的解决方案是:
final data = await rootBundle.loadString('lang/de.json');
final Map<String, Map<String, String>> de = {
for (final entry in (json.decode(data) as Map).entries)
entry.key as String: {
for (final e in (entry.value as Map).entries)
e.key as String: e.value as String,
},
};https://stackoverflow.com/questions/67857485
复制相似问题