Dart:如何json解码'0'为双

时间:2018-04-02 12:55:05

标签: dart

我有一个服务,它向我发送一个值列表,在使用'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;
}

2 个答案:

答案 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()方法。因此,您可以在两种情况下(doubleint)使用它。

double jsonToDouble(dynamic value) {
   return value.toDouble();
}

但是,如果值是doubleint,则仅 有效。如果值为string,则会发生异常。