驼峰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

我正在用camel编写CSV拆分器。我的要求如下:

  • 第一行是header
  • 未定义标题。但可以不包含任何属性
  • 我需要分割文件,然后每个分割都包含键值属性的映射
  • 示例csv1:

    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、价格、折扣、优惠。要求是标题不是固定的,但必须按照供应商进行解释。我们有一个规则引擎,可以读取这些标题,然后将它们转换成一组我们的系统可以理解的属性?