驼峰csv拆分器:解析动态标头
我正在用camel编写CSV拆分器。我的要求如下:驼峰csv拆分器:解析动态标头,csv,apache-camel,bean-io,bindy,Csv,Apache Camel,Bean Io,Bindy,我正在用camel编写CSV拆分器。我的要求如下: 第一行是header 未定义标题。但可以不包含任何属性 我需要分割文件,然后每个分割都包含键值属性的映射 示例csv1: header1, header2, header3 value11, value12 , value13 value21, value22 , value23 {"header1":"value11", "header2": "value12", "header3": "value13"}, {"header1":"va
header1, header2, header3
value11, value12 , value13
value21, value22 , value23
{"header1":"value11", "header2": "value12", "header3": "value13"},
{"header1":"value21", "header2": "value22", "header3": "value23"}
header1, header2
value11, value12
value21, value22
{"header1":"value11", "header2": "value12"},
{"header1":"value21", "header2": "value22"}
预期拆分:
header1, header2, header3
value11, value12 , value13
value21, value22 , value23
{"header1":"value11", "header2": "value12", "header3": "value13"},
{"header1":"value21", "header2": "value22", "header3": "value23"}
header1, header2
value11, value12
value21, value22
{"header1":"value11", "header2": "value12"},
{"header1":"value21", "header2": "value22"}
示例csv2:
header1, header2, header3
value11, value12 , value13
value21, value22 , value23
{"header1":"value11", "header2": "value12", "header3": "value13"},
{"header1":"value21", "header2": "value22", "header3": "value23"}
header1, header2
value11, value12
value21, value22
{"header1":"value11", "header2": "value12"},
{"header1":"value21", "header2": "value22"}
预期拆分:
header1, header2, header3
value11, value12 , value13
value21, value22 , value23
{"header1":"value11", "header2": "value12", "header3": "value13"},
{"header1":"value21", "header2": "value22", "header3": "value23"}
header1, header2
value11, value12
value21, value22
{"header1":"value11", "header2": "value12"},
{"header1":"value21", "header2": "value22"}
如何使用Bindy或BeanIO在camel中实现这一点?我们可以使用以下代码
byte[] bytes = exchange.getIn().getBody(byte[].class);
InputStream inputStream = new ByteArrayInputStream(bytes);
Reader in = new InputStreamReader(inputStream, "UTF-8");
Iterable<CSVRecord> records = CSVFormat.EXCEL.withHeader().parse(in);
for (CSVRecord csvRecord : records) {
String header1= csvRecord.get("header1");
String header2 = csvRecord.get("header2");
// We can form json here
System.out.println("header1 :"+header1);
System.out.println("header2 :"+header2);
}
byte[]bytes=exchange.getIn().getBody(byte[].class);
InputStream InputStream=新的ByteArrayInputStream(字节);
读取器in=新的InputStreamReader(inputStream,“UTF-8”);
Iterable records=CSVFormat.EXCEL.withHeader().parse(in);
用于(CSVRecord CSVRecord:记录){
字符串header1=csvRecord.get(“header1”);
字符串header2=csvRecord.get(“header2”);
//我们可以在这里形成json
系统输出打印项次(“表头1:+表头1”);
System.out.println(“header2:+header2”);
}
您能详细介绍一下这个用例吗?对于集成来说,这似乎是一个非常奇怪的设计。这些是由供应商传递给我们的csv文件。其中包含供应商将向我们出售的产品的相关信息。标题包含有关供应商提供的属性的信息:如库存大小、sla、价格、折扣、优惠。要求是标题不是固定的,但必须按照供应商进行解释。我们有一个规则引擎,可以读取这些标题,然后将它们转换成一组我们的系统可以理解的属性?