Dart:如何对json进行解码';0';加倍
我有一个服务正在向我发送一个值列表,在使用“dart:convert json.decode”解析后,我得到一个列表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? 我
(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();
}