【问题标题】:Groupby key segment in Dataweave 1.0Dataweave 1.0 中的 Groupby 键段
【发布时间】:2018-10-25 14:47:15
【问题描述】:

我对 Mule ESB 3.8.4 中的 DataWeave 有以下要求,其中 shipDate_nshipMethod_ntrackingNumber_n 将在输入负载中从 1 变化到 n。我需要根据key中下划线后的数字对数据进行分组:

输入负载:

[{
    "shipDate_1": "2010-01-11T07:00:00Z",
    "shipDate_2": "2010-02-11T07:00:00Z",
    "shipDate_3": "2010-03-11T07:00:00Z",
    "shipMethod_1": "UPS1 Ground",
    "shipMethod_2": "UPS2 Ground",
    "shipMethod_3": "UPS3 Ground",
    "trackingNumber_1": "1",
    "trackingNumber_2": "2",
    "trackingNumber_3": "3"
}]

所需输出:

[{
    "trackingInfo": [{
            "trackingNbr": "1",
            "shipMethod": "UPS1 Ground",
            "shipDate": "2010-01-11T07:00:00Z"
        },
        {
            "trackingNbr": "2",
            "shipMethod": "UPS2 Ground",
            "shipDate": "2010-02-11T07:00:00Z"
        },
        {
            "trackingNbr": "3",
            "shipMethod": "UPS3 Ground",
            "shipDate": "2010-03-11T07:00:00Z"
        }
    ]
}]

【问题讨论】:

  • Mule 版本:3 还是 4?
  • 运行时版本为 3.8.4

标签: mule dataweave


【解决方案1】:

您可以使用pluck 方法来计算字段数,例如n,然后迭代n/3 次并动态形成键以从输入中获取数据。以下代码适用于给定的输入

代码

%dw 1.0
%output application/json
%var data = payload[0]
%var dataSet = (sizeOf (data pluck $$ )) / 3
%var startIndex = 1
---
[trackingInfo : [ startIndex[0] .. dataSet] map {
    "trackingNbr": data[("trackingNumber_" ++ $)],
    "shipMethod":data[("shipMethod_" ++ $)],
    "shipDate": data[("shipDate_" ++ $)]
}]

输入-

[
    {
        "shipDate_1": "2010-01-11T07:00:00Z",
        "shipDate_2": "2010-02-11T07:00:00Z",
        "shipMethod_1": "UPS1 Ground",
        "shipMethod_2": "UPS2 Ground",
        "trackingNumber_1": "1",
        "trackingNumber_2": "2"
    }
]

输出-

[
  {
    "trackingInfo": [
      {
        "trackingNbr": "1",
        "shipMethod": "UPS1 Ground",
        "shipDate": "2010-01-11T07:00:00Z"
      },
      {
        "trackingNbr": "2",
        "shipMethod": "UPS2 Ground",
        "shipDate": "2010-02-11T07:00:00Z"
      }
    ]
  }
]

另一种方法是基于输入中存在的trackingNumber 字段的计数

%dw 1.0
%output application/json
%var data = payload[0]
%var dataSet =  sizeOf ((data pluck $$ ) filter ($ contains "trackingNumber"))
%var startIndex = 1
---
[trackingInfo : [startIndex[0] .. dataSet] map {
    "trackingNbr": data[("trackingNumber_" ++ $)],
    "shipMethod":data[("shipMethod_" ++ $)],
    "shipDate": data[("shipDate_" ++ $)]
}]

HTH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多