如何将TSV数据解析为嵌套对象
问题描述:
我试图将以下TSV数据解析为嵌套对象,但我的“标题”字段在嵌套类中始终为空。如何将TSV数据解析为嵌套对象
我已经在底部包括了将TSV数据转换为对象的方法。
value1 | metaData1 | valueA |
value2 | metaData2 | valueB |
value3 | metaData3 | valueC |
public class Data {
@Parsed(index = 0)
private String value0;
@Parsed(index = 1)
private String foo;
@Nested
MetaData metaData;
public static class MetaData {
@Parsed(index = 1)
private String title;
}
}
public <T> List<T> convertFileToData(File file, Class<T> clazz, boolean removeHeader) {
BeanListProcessor<T> rowProcessor = new BeanListProcessor<>(clazz);
CsvParserSettings settings = new CsvParserSettings();
settings.getFormat().setDelimiter('|');
settings.setProcessor(rowProcessor);
settings.setHeaderExtractionEnabled(removeHeader);
CsvParser parser = new CsvParser(settings);
parser.parseAll(file);
return rowProcessor.getBeans();
}
答
你忘了定义上的index
您Metadata.title
:
public static class MetaData {
@Parsed(index=1)
private String title;
}
此外,要设置的分隔符\t
当您输入的使用|
作为分隔符。
当我使用索引= 1,然后我工作,我在title属性中获得一个值,但是,当我使用index = 2时,我得到null,这是奇数。我已更新问题以删除\ t,这是一个错字。 –
我尝试在'Metadata.title'中设置index = 2,它工作。你使用的是最新版本吗? –
我已更新到最新版本,它正在工作。谢谢!我必须做的一件事情是让我工作,但我必须首先添加我想用于外部类的嵌套类的索引。我已经更新了原始问题,以便您可以看到这一点 - 查看属性“foo”。这是如何工作的? –