You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 09:05:03