我有一个服务,它向我发送一个值列表,在使用'dart:convert json.decode'解析后,我得到一个List<动态> 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;
}
答案 0 :(得分:7)
您可以通过使用reviver构建自己的编解码器,为JSON解码添加一些特殊逻辑。将为List中的每个属性或List中的项调用此回调。
List<dynamic>
但是,无论您的所有号码类型是否为双打或整数,您总是从dart:covert
获得List.cast
。根据您所使用的飞镖版本, 可以使用List<double>
转换为List<double> values = oldValues.cast<double>();
。
List<double>
如果不可用,您可以创建一个新的{{1}}并将值添加到它,以便正确设置运行时类型。
答案 1 :(得分:1)
双打使用toDouble()
方法。因此,您可以在两种情况下(double
和int
)使用它。
double jsonToDouble(dynamic value) {
return value.toDouble();
}
但是,如果值是double
或int
,则仅 有效。如果值为string
,则会发生异常。