如何基于CSV中的第一列在Dataweave中实施分组依据

时间:2019-05-21 03:21:18

标签: anypoint-studio dataweave mulesoft

我有一个传入的CSV文件,看起来像这样(请注意,第一个字段是通用的-这是订单号)

36319602,100,12458,HARVEY NORMAN,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
36319602,101,12459,HARVEY NORMAN,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
36319602,102,12457,HARVEY NORMAN, 
36319601,110,12458,HARVEY NORMAN,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
36319601,111,12459,HARVEY NORMAN,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
36319601,112,12457,HARVEY NORMAN, 
36319603,110,12458,HARVEY NORMAN,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
36319603,121,12459,HARVEY NORMAN,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
36319603,132,12457,HARVEY NORMAN, 

这是我当前的Dataweave代码

list_of_orders: {
    order: payload map ((payload01 , indexOfPayload01) -> {
        order_dtl: 
        [{
            seq_nbr: payload01[1],
            route_nbr: payload01[2]
        }],
        order_hdr: {
            ord_nbr: payload01[0],
            company: payload01[3],
            city: payload01[4],
        }
    })
}

所需输出的示例将是这样的……(这只是模拟了)。请注意,我希望按第一列分组的单个标头是订单号-但是有多个明细行


    "list_of_orders": {
      "order": [
        {
          "order_dtl": [
            {
                seq_nbr: 100,
                route_nbr: 12458
            },
            {
                seq_nbr: 101,
                route_nbr: 12459
            },
            {
                seq_nbr: 102,
                route_nbr: 12457
            }                        
          ],
          "order_hdr": 
          {
            ord_nbr: 36319602,
            company: HARVEY NORMAN
          }
        }
      ]
    }

除了重复order_hdr键外,它工作正常。 他们想要的是一个标头键,下面有多个详细信息。 分组应基于“ ord_nbr:payload01 [0]”

任何帮助表示赞赏

谢谢

1 个答案:

答案 0 :(得分:0)

我认为您正在使用Dataweave1。在dw1中,此from functools import partial def my_function_op(p1, p2, p3, p4): # do stuff f = partial(my_function_op, a1, a2) x = f(a3, a4) # x = my_function_op(a1, a2, a3, a4) 获得所需的输出(请注意,如果有,您可以将字段指针[0],1等更改为字段名称映射它们设置为元数据等)

groupBy

enter image description here

更新

以下是具有多个订单的新输入样本的输出:

%dw 1.0

%output application/json
---
list_of_orders:  {
    order: (payload groupBy ($[0])) map {
    order_dtl: $ map {
        seq_nbr: $[1],
        route_nbr: $[2]
    },
    order_hdr: 
          {
            ord_nbr:  $[0][0],
            company: $[0][3]
          }
 }}