BeanIO 从代表集合的 CSV 中读取字段
BeanIO reading field from CSV which represents a collection
我有一个带有 ;
分隔符的 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?
提前致谢
我的解决方案是为字段创建一个 typeHandler:
public class MyCustomTypeHandler implements TypeHandler {
在我的模板中,我使用了 typeHandler:
<field name="fieldWithList" typeHandler="MyCustomTypeHandler"/>
所以在 typeHandler 的解析方法内部我可以处理字段:
if (nonNull(text)) {
asList(text.split("\|")).forEach(str -> {
String[] fields = str.split(";", -1);
// process and add items to the list
});
}
我有一个带有 ;
分隔符的 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?
提前致谢
我的解决方案是为字段创建一个 typeHandler:
public class MyCustomTypeHandler implements TypeHandler {
在我的模板中,我使用了 typeHandler:
<field name="fieldWithList" typeHandler="MyCustomTypeHandler"/>
所以在 typeHandler 的解析方法内部我可以处理字段:
if (nonNull(text)) {
asList(text.split("\|")).forEach(str -> {
String[] fields = str.split(";", -1);
// process and add items to the list
});
}