【问题标题】:Ignore Specific Columns Parsing a CSV File with Jackson CSV忽略使用 Jackson CSV 解析 CSV 文件的特定列
【发布时间】:2019-09-27 18:20:44
【问题描述】:

我的问题是我需要将具有任意列/顺序的 CSV 文件解析为已知域 POJO(例如 Person)。我可以确定我需要处理哪些列,而忽略其余列。

CsvParser.Feature.IGNORE_TRAILING_UNMAPPABLE 选项似乎正是我所需要的,但我需要处理的列不必在 CSV 文件的开头进行分组,我不能强制用户“重新排序” " 他们上传的 CSV 文件的列。此外,有时我没有得到标题行,但 UI 会强制用户识别列并传递此信息。

例如,我有以下 CSV 文件:

First Name,Last Name,Nickname,DOB,Occupation,Postal Code
Freddy,Benson,Ruprecht,08/14/45,Con Artist,76701
Lawrence,Jamieson,Prince,03/14/33,Con Artist,5201
Janet,Colgate,Jackal,03/13/55,Con Artist,90401

我只需要 6 列中的 4 列(名字、姓氏、出生日期、邮政编码),因为我的 Person POJO 只包含这些字段:

public class Person {
    private String firstName;
    private String lastName;
    private LocalDate dob;
    private String postalCode;
}

我已经为 Person 定义了一个 CsvSchema,并指定了我感兴趣的列(名字、姓氏、IGNORE、DOB、IGNORE2、邮政编码),因为我想跳过列(昵称、职业) .然而,“IGNORE”列在反序列化器中的映射期间被忽略,我最终得到“DOB”的“昵称”值,导致 DOB 字段的值无效。

【问题讨论】:

    标签: jackson jackson-databind jackson-dataformat-csv


    【解决方案1】:

    请参考提供的这个链接

    你应该可以解决这个https://github.com/FasterXML/jackson-dataformat-csv/issues/82

    【讨论】:

      【解决方案2】:

      我的错误是将模式定义如下,这显然将模式与域 POJO 强耦合:

      CsvSchema schema = mapper
          .typedSchemaFor(Person.class)
          .withSkipFirstDataRow(hasHeader)
          .sortedBy(columnOrder.toArray(new String[columnOrder.size()]));
      

      通过如下定义架构/列来解决,这似乎将架构松散地耦合到域 POJO:

      CsvSchema schema = CsvSchema.builder()
          .addColumn("firstName")
          .addColumn("lastName")
          .addColumn("ignore1")
          .addColumn("dob")
          .addColumn("ignore2")
          .addColumn("postalCode")
          .build();
      
          CsvMapper mapper = new CsvMapper();
          MappingIterator<Person> personIter = mapper
                  .readerFor(Person.class)
                  .with(schema)
                  .readValues(csvFile);
      

      【讨论】:

        猜你喜欢
        • 2017-01-23
        • 2018-12-11
        • 1970-01-01
        • 2014-08-14
        • 2019-05-03
        • 2014-10-09
        • 2019-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多