Dart解析JSON为Map<double, double>时遇类型不匹配错误求助
解决Dart中JSON解析为Map<double, double>的类型错误
错误原因
你碰到的TypeError: Instance of 'JSArray': type 'List<dynamic>' is not a subtype of type 'List<double>'错误,核心问题是json.decode解析后返回的steps.keys属于Iterable<dynamic>,调用map后若不明确指定类型,toList()会生成List<dynamic>,无法直接赋值给List<double>。更重要的是,你最终需要的是Map<double, double>,没必要单独提取keys列表,直接转换整个Map更高效。
解决方案
直接遍历解析后的Map<String, dynamic>,将每个键值对转换为double类型,一步构建目标Map<double, double>:
修正后的完整代码
final jsonData = await rootBundle.loadString('assets/data/dataTest.json'); final data = json.decode(jsonData); final modules = data['modules'] as Map<String, dynamic>; final steps = modules['data'] as Map<String, dynamic>; // 方法1:用forEach遍历构建 final Map<double, double> resultMap = {}; steps.forEach((keyStr, valueStr) { final key = double.parse(keyStr); final value = double.parse(valueStr); resultMap[key] = value; }); // 方法2:用Map.fromEntries更简洁 final Map<double, double> resultMap = Map.fromEntries( steps.entries.map((entry) => MapEntry( double.parse(entry.key), double.parse(entry.value), )), );
关键说明
- 给解析后的
modules和steps显式指定Map<String, dynamic>类型,避免动态类型带来的隐式错误。 - 跳过中间不必要的列表转换,直接转换键值对得到目标Map,从根源上避免类型不匹配问题。
内容的提问来源于stack exchange,提问作者Richard Winter
相关产品推荐
相关产品推荐

