java - Java Jackson CSV:空标题字段
问题描述
我正在尝试将一个大的 csv 文件映射到一个带有 jackson csv 的类。该 csv 文件根本没有标准化,这会导致几个问题。
为了给你一个印象,我创建了一个有代表性的文件:
,B,C,D,E,F�F,G,H H,I (I)
0,AAA,20. Jan.,10,A,5,AA: AAAA,1,A�AAA
1,BBB,05-Dez-14,12,BBB,1,BB: BBBB,32,BBB
2,CCCC,28. Jun.,80,CCCC,2,CCCC: CCCC,1,CCC / CCC
第一行表示标题,第一列表示 id。Jackson CsvMapper 无法映射第一列,因为它是空名称。
CsvMapper mapper = new CsvMapper();
CsvSchema bootstrapSchema = CsvSchema.builder()
.setColumnSeparator(',')
.setUseHeader(true)
.setStrictHeaders(true)
.setSkipFirstDataRow(true)
.addColumn("", CsvSchema.ColumnType.NUMBER)
.addColumn("B", CsvSchema.ColumnType.STRING)
.addColumn("C", CsvSchema.ColumnType.STRING)
.addColumn("D", CsvSchema.ColumnType.NUMBER)
.addColumn("E", CsvSchema.ColumnType.STRING)
.addColumn("F�F", CsvSchema.ColumnType.NUMBER)
.addColumn("G", CsvSchema.ColumnType.STRING)
.addColumn("H H", CsvSchema.ColumnType.NUMBER)
.addColumn("I (I)", CsvSchema.ColumnType.STRING)
.build();
//File file = new ClassPathResource(fileName).getFile();
MappingIterator<POJO> readValues =
mapper.reader(POJO.class).with(bootstrapSchema).readValues(file);
while (readValues.hasNext()){
logger.info(mapper.writeValueAsString(readValues.nextValue()));
}
和 POJO 类:
@JsonPropertyOrder({"","B","C","D","E","F�F", "G","H H","I (I)"})
public class POJO {
@JsonProperty
private Integer id;
@JsonProperty("B")
private String b;
@JsonProperty("C")
private String c;
@JsonProperty("D")
private Integer d;
@JsonProperty("E")
private String e;
@JsonProperty("F�F")
private Integer f;
@JsonProperty("G")
private String g;
@JsonProperty("HH")
private Integer h;
@JsonProperty("I (I)")
private String i;
}
那么,如何正确映射这个混乱呢?
提前致谢
解决方案
试着改变你的CsvMapper
样子。
List<Object> objList = new CsvMapper()
.enable(CsvParser.Feature.SKIP_EMPTY_LINES)
.enable(CsvParser.Feature.TRIM_SPACES)
.enable(CsvParser.Feature.WRAP_AS_ARRAY)
.enable(CsvParser.Feature.INSERT_NULLS_FOR_MISSING_COLUMNS)
.readerFor(Map.class)
.with(CsvSchema.emptySchema().withHeader())
.readValues(file)
.readAll();
推荐阅读
- javascript - 访问和循环访问 JSON 文件
- java - 使用辅助功能 ID 和 xpath 错误单击菜单
- python - 使用来自liswidget的itemdelegate和信号时如何保护tablewidget中更改的单元格?
- c++ - 使用 DirectX 11 插入背景颜色?
- r - 如何为每个 x 值制作两个条形图?
- sql - 将自定义语句转换为激活的代码
- c# - POST 到 OData v4 Web API 操作时子集合为空
- r - 使用 R 中的因子 self 的子集重命名因子水平
- android - 试图在 Android Room 中捕获 SQLiteConstraintException 并显示警报
- javascript - 向下传递模块 - javascript