2017-08-29 11 views
1

次のTSVデータをネストされたオブジェクトに解析しようとしていますが、「タイトル」フィールドは常にNestedクラス内でnullです。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(); 
} 

答えて

0

あなたMetadata.titleindexを定義するのを忘れ:

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

をまた、あなたの入力が使用している間、あなたは\tに区切り文字を設定しています|をセパレータとして使用します。

+0

私はindex = 1を使用すると、それは動作しますが、title属性で値を取得します。ただし、index = 2を使用すると、奇妙なnullが返されます。私は\ tを取り除くための質問を更新しました。これは誤字です。 –

+0

私は 'Metadata.title'にindex = 2を設定しようとしました。最新バージョンを使用していますか? –

+0

私は最新バージョンに更新して動作しています。ありがとう!それを動作させるために必要なことの1つは、まず外部クラスのネストされたクラスに使用したいインデックスを追加する必要があったことです。元の質問を更新しましたので、これを見ることができます - 属性 "foo"を見てください。これはどのように働くと思われますか? –

関連する問題