Dart:如何对json进行解码';0';加倍

Dart:如何对json进行解码';0';加倍,dart,Dart,我有一个服务正在向我发送一个值列表,在使用“dart:convert json.decode”解析后,我得到一个列表json,如下所示: (values) [ 0.23, 0.2, 0, 0.43 ] 当我试图将值解析为“double”时,我得到一个解析错误 double value = values[2] // error 因为如果我们检查每个元素的.runtimeType,我们可以看到 [double, double, int, double] 那么,如何避免将“0”解释为int? 我

我有一个服务正在向我发送一个值列表,在使用“dart:convert json.decode”解析后,我得到一个列表json,如下所示:

(values) [ 0.23, 0.2, 0, 0.43 ]
当我试图将值解析为“double”时,我得到一个解析错误

double value = values[2] // error
因为如果我们检查每个元素的.runtimeType,我们可以看到

[double, double, int, double]
那么,如何避免将“0”解释为int? 我希望避免使用这样的函数:

double jsonToDouble(dynamic value) {
  if(value.runtimeType == int) {
    return (value as int).toDouble();
  }
  return value;
}

您可以通过使用复活器构建自己的编解码器,为JSON解码添加一些特殊的逻辑。将为映射中的每个属性或列表中的每个项调用此回调

  final myJsonCodec = new JsonCodec.withReviver((dynamic key, dynamic value) {
     if (value is int) return value.toDouble();
     return value;
  });
但是,无论您的所有数字类型是否都是双精度或整数,您都会从
dart:covert
中获得
列表。根据您使用的dart版本,您可以使用
List.cast
转换为
List

List values=oldValues.cast();

如果不可用,您可以创建一个新的
列表
并向其中添加值,以便正确设置运行时类型。

Doubles有一个
toDouble()
方法。因此,您可以在这两种情况下使用它(
double
int


但是,这仅在值为
双精度
整数
时有效。如果值是
字符串
,则会发生异常。

是否尝试映射值数组<代码>值.map((i)=>i.toDouble()).toList()我将更新我的问题,因为我从“列表值”开始,这是我提到的列表,如果我像你提到的那样进行映射,我将以“列表”结束,而不是我需要的“列表”。
List<double> values = oldValues.cast<double>();
double jsonToDouble(dynamic value) {
   return value.toDouble();
}