如何将 TSV 数据解析为嵌套对象

How to parse TSV data into nested objects

我正在尝试将以下 TSV 数据解析为嵌套对象,但我的 "title" 字段在嵌套 class 中始终为空。

我在底部包含了将 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();
}

您忘记在 Metadata.title 上定义 index:

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

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