java - jackson CSV 缺失列

标签 java parsing csv jackson

我正在使用 Jackson CSV将 CSV 文件解析为 POJO。我的问题是,如果 CSV 中的一行的列太少,解析器不会提示,只是将其余字段设置为空。

解析代码:

    CsvMapper csvMapper = new CsvMapper();
    csvMapper.addMixInAnnotations(Person.class, PersonCsvMixin.class);
    CsvSchema schema = csvMapper.schemaFor(Person.class).withHeader();
    MappingIterator<Person> it = csvMapper.reader(dataClass).with(schema).readValues(csv);
    LinkedList<Person> output = new LinkedList<>();

    while(it.hasNext()) {
        output.push(it.next());
    }

混合:

import com.fasterxml.jackson.annotation.*;

@JsonPropertyOrder(value = { "FirstName", "LastName", "Title"})
public abstract class Person {
    @JsonProperty("LastName")
    public abstract String getLastName();
    @JsonProperty("FirstName")
    public abstract String getFirstName();
    @JsonProperty("Title")
    public abstract String getTitle();
}

数据类:

public class OfficespaceInputEmployee implements Serializable{
    protected String firstName;
    protected String lastName;
    protected String title;
    // .. getters and setters
}

如果我像下面这样解析文件,即使中间记录缺少两个字段也不会发生错误。相反,LastName 和 Title 变为 null

"FirstName", "LastName", "Title"
"John", "Smith", "Mr"
"Mary"
"Peter", "Jones", "Dr"

是否有启用的功能会导致此错误?

最佳答案

我知道这是一个旧线程,但是当我自己遇到同样的问题时,让我分享解决方案:

csvMapper.configure(CsvParser.Feature.FAIL_ON_MISSING_COLUMNS, true); 会成功的。

关于java - jackson CSV 缺失列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775073/

相关文章:

postgresql - 在 postgreSQL 表中导入时如何识别文本/csv 文件标题行中的字段名?

windows - 用于拆分 .csv 文件的批处理文件

python - 将数据框传递给 pandas 中的 SQL 时,如何检查记录是否存在?

java - GWT 客户端 : Java object to json string and vice versa

javascript - 向 JSON 数据集添加值

Java,使用用户名和密码访问安全的 WSO2 Web 服务

php - PHP解析/语法错误;以及如何解决它们

javascript - 如何从 JSON 对象中的键中获取值?

java - 带有扩展的泛型的正确 java 语法

java - 错误: <identifier> expected nm ="Sam";