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

如何将List<Map>转为List<ChartData>?转换后值全为0的问题

解决List转List后value全为0的问题

排查步骤及修复方案

1. 核对Map中的key是否完全匹配

先确认diData里每个Map对象的数值字段key是**'value'**(注意大小写、拼写必须完全一致)。如果实际key是'Value'、'val'这类变体,json['value']会返回null,非null安全环境下会被自动转为0,null安全环境下则直接报错。
修复:把fromJson里的key改成和原始Map一致的,比如实际key是'num'就修改为:

value: json['num'],

2. 显式处理数值类型转换

如果diData里的value是字符串类型(比如接口返回的JSON字符串),直接赋值给double会触发类型错误,若你做了错误捕获或使用旧版Dart,可能会被默认转为0。这时候需要显式转换:

factory ChartData.fromJson(Map<String, dynamic> json) => ChartData(
      time: DateTime.parse(json['time']), // 顺带修复字符串转DateTime的问题(若你的time是字符串格式)
      value: double.parse(json['value'].toString()),
    );

如果value是int类型(比如10、20),显式转为double更稳妥:

value: (json['value'] as num).toDouble(),

3. 验证原始数据是否正确

转换前先打印diData内容,确认里面的value字段确实不是0:

print(diData); // 查看每个Map里的value实际值

如果原始数据里的value本来就是0,那转换后自然也是0,这时候要检查数据来源是否正确。

4. 修复DateTime的潜在问题

顺带提一下,你的fromJson直接把json['time']赋值给DateTime类型,如果json['time']是字符串(比如"2024-05-20T12:00:00")会直接报错,需要改成:

time: DateTime.parse(json['time']),

如果json['time']是时间戳(比如1716187200000),则用:

time: DateTime.fromMillisecondsSinceEpoch(json['time']),

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:05:13