首页 > 解决方案 > 来自 CSV 的 BeanIO 读取字段,代表一个集合

问题描述

我有一个带有;分隔符的 CSV 文件,但在其中一个字段中,它表示带有|分隔符的对象:

field1;field2;field3;"field-4.1;field-4.2|field-4.1;field-4.2";field5;field6;

所以问题在于field4哪个表示由管道分隔的多个对象。

其实我的模板是这样的:

           <record name="fields" class="br.com.beanio.MyPojo">
                <field name="field1"/>
                <field name="field2"/>
                <field name="field3"/>
                <segment name="fields4" minOccurs="0" collection="list" class="br.com.beanio.MySubPojo">
                    <field name="field4-1" />
                    <field name="field4-2" />
                </segment>
                <field name="field5"/>
                <field name="field6"/>
            </record>

我尝试使用不同的属性来识别 field4 何时代表一个新对象,但没有奏效。

如何使用 beanIO 模板读取字段 4?

提前致谢

标签: javacsvbean-io

解决方案


我的解决方案是为该字段创建一个 typeHandler:

public class MyCustomTypeHandler implements TypeHandler {

在我的模板中,我使用 typeHandler:

<field name="fieldWithList" typeHandler="MyCustomTypeHandler"/>

因此,在 typeHandler 的 parse 方法中,我可以处理该字段:

        if (nonNull(text)) {
            asList(text.split("\\|")).forEach(str -> {
                String[] fields = str.split(";", -1);
                // process and add items to the list
            });
        }

推荐阅读