Jsefa-使用动态列数反序列化CSV

时间:2017-07-31 10:14:09

标签: java csv jsefa

我的CSV具有动态列数,例如:

Cannot implicitly convert type 'System.Collections.Generic.List<ContosoUniversity.Models.Instructor>' to 'System.Linq.IQueryable<ContosoUniversity.Models.Instructor>'. An explicit conversion exists (are you missing a cast?)

我想使用Jsefa(或任何其他建议)将其反序列化为以下形式的类:

001, a ,b
002, a, b, c
003, a

Jsefa是否支持它?

1 个答案:

答案 0 :(得分:1)

由于Google中的搜索短语“jsefa csv dynamic number of columns”将此问题作为热门评分返回,因此答案似乎可能是“否”。

我怀疑这不能很好地满足您的要求,而且非常难看,但鉴于默认情况下字段是可选的,您可以执行以下操作:

@CsvDataType
public class MyCsv {
  @CsvField(pos=0)
  private String id
  @CsvField(pos=1)
  private String data1
  @CsvField(pos=2)
  private String data2
  @CsvField(pos=3)
  private String data3
  @CsvField(pos=4)
  private String data4
  @CsvField(pos=5)
  private String data5
  ...
  @CsvField(pos=N)
  private String dataN
}

并且CSV中没有值的字段只有null

为了更清洁的解决方案,我怀疑你需要实现自己的CsvLowLevelDeserializer,它可能会执行与CsvLowLevelDeserializerImpl相同的大部分事情,但对于最后一个字段,它可以看起来超出分隔符以获得多个值。

最后,CSV是一种非常简单的格式,可以根据您的需要编写自己的解析器,这可能是最直接的选择。