【问题标题】:Exception while parsing a double value with jackson-csv使用 jackson-csv 解析双精度值时出现异常
【发布时间】:2015-09-23 12:44:14
【问题描述】:

我在使用 fastxml 解析 CSV 文件中的双精度值时遇到了一些问题。 CSV 文件以标题 ID;Size;... 开头,下面的行是 1;27.98;... 我也有一个模型来映射 CSV 文件:

class Model{
   private String id;
   private double size;
   //...
}

我还按照教程页面上的说明配置了 CSV-Parser:

//...
CsvSchema schema = CsvSchema.builder().addColumn("id").addColumn("size")
     .setColumnSeparator(';')
     .setEscapeChar('"')
     .build();
CsvMapper mapper = new CsvMapper();
MappingIterator<Model> it = mapper.reader(Model.class).with(schema)
    .readValues(new File(csvFile));
while(it.hasNext()){
    Model row = it.next();
    System.out.println(row);
}

当我运行解析器时,“id”被正确解析,但编译器抛出异常并显示消息 RuntimeJsonMappingException: Can not construct an instance of double from String value 'size':not a valid Double value

我不明白到底是什么问题,因为值 27.98 是一个有效的双精度值。

我是否在配置中遗漏了什么?

【问题讨论】:

  • 您能发一份您的 CSV 文件样本吗?
  • 看起来它正在解析 csv 文件的标题。字符串 'size' 不是有效的双精度。
  • 我也对此很感兴趣,并尝试了删除标题。这是 CSV 文件:
    id;size;rad;thickness
    01;27.98;1;1.5;
  • 如果您的 csv 没有标头,例如 '01;19.99;1;2',您得到的确切错误消息是什么? (不需要final ; 在行尾)
  • 天哪。我一直在使用错误的 CSV。我从错误的标题中删除了标题:D。谢谢你的帮助。这当然是标题。 “大小”不是有效的双精度值:D

标签: java jackson fasterxml


【解决方案1】:

在您的CsvMapper 上使用.withHeader(),如下所示:

CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(Model.class).withHeader();

然后您可以将标题保存在 csv 文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2013-05-05
    • 2016-07-15
    • 2016-04-06
    相关资源
    最近更新 更多