如何将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(); 
} 

你忘了定义上的indexMetadata.title

public static class MetaData { 
    @Parsed(index=1) 
    private String title; 
} 

此外,要设置的分隔符\t当您输入的使用|作为分隔符。

+0

当我使用索引= 1,然后我工作,我在title属性中获得一个值,但是,当我使用index = 2时,我得到null,这是奇数。我已更新问题以删除\ t,这是一个错字。 –

+0

我尝试在'Metadata.title'中设置index = 2,它工作。你使用的是最新版本吗? –

+0

我已更新到最新版本,它正在工作。谢谢!我必须做的一件事情是让我工作,但我必须首先添加我想用于外部类的嵌套类的索引。我已经更新了原始问题,以便您可以看到这一点 - 查看属性“foo”。这是如何工作的? –