json DW mule 中的关键迭代

json key iteration in DW mule

我有以下需求需要与动态 json 密钥交互 需要使用这个 json 键并遍历它 这是我的输入

[  
  {  
    "eventType":"ORDER_SHIPPED",
    "entityId":"d0594c02-fb0e-47e1-a61e-1139dc185657",
    "userName":"educator@school.edu",
    "dateTime":"2010-11-11T07:00:00Z",
    "status":"SHIPPED",
    "additionalData":{  
      "quoteId":"d0594c02-fb0e-47e1-a61e-1139dc185657",
      "clientReferenceId":"Srites004",
      "modifiedDt":"2010-11-11T07:00:00Z",
      "packageId":"AIM_PACKAGE",
      "sbsOrderId":"TEST-TS-201809-79486",
      "orderReferenceId":"b0123c02-fb0e-47e1-a61e-1139dc185987",
      "shipDate_1":"2010-11-11T07:00:00Z",
      "shipDate_2":"2010-11-12T07:00:00Z",
      "shipDate_3":"2010-11-13T07:00:00Z",
      "shipMethod_1":"UPS Ground",
      "shipMethod_3":"UPS Ground3",
      "shipMethod_2":"UPS Ground2",
      "trackingNumber_3":"333",
      "trackingNumber_1":"2222",
      "trackingNumber_2":"221"
    }
  }
]

我需要如下输出

{  
  "trackingInfo":[  
    {  
      "shipDate":"2010-11-11T07:00:00Z",
      "shipMethod":"UPS Ground",
      "trackingNbr":"2222"
    },
    {  
      "shipDate":"2010-11-12T07:00:00Z",
      "shipMethod":"UPS Ground2",
      "trackingNbr":"221"
    },
    {  
      "shipDate":"2010-11-13T07:00:00Z",
      "shipMethod":"UPS Ground3",
      "trackingNbr":"333"
    }
  ]
}

shipdate, shippethod ,trackingnumber 可以是n个数字。 如何使用 json 键进行迭代。

首先map要迭代的数组,然后使用pluck获取键列表。

然后只要shipDate 到shipMethod 等字段的数量始终相同。过滤键列表以仅迭代这些字段组合存在的次数。

然后通过使用与索引连接的'shipDate__ 动态查找键来构造每个对象的输出(增加 1,因为您的示例从 1 开始,而 dw 数组从 0 开始):

%dw 2.0
output application/json

---

    payload map ((item, index) -> item.additionalData pluck($$) filter ($ contains 'shipDate')  map ((item2, index2) ->
        using(incIndex=(index2+1 as String)){ 
            "shipDate": item.additionalData[('shipDate_'++ incIndex)],
            "shipMethod": item.additionalData[('shipMethod_'++ incIndex)],
             "trackingNbr": item.additionalData[('trackingNumber_'++ incIndex)],
        }
    )

)

在 DW 1.0 语法中:

%dw 1.0
%output application/json  
---
payload map ((item, index) -> item.additionalData pluck ($$) filter ($ contains 'shipDate') map ((item2, index2) -> 
    using (incIndex = (index2 + 1 as :string))
      {
        "shipDate": item.additionalData[('shipDate_' ++ incIndex)],
        "shipMethod": item.additionalData[('shipMethod_' ++ incIndex)],
        "trackingNbr": item.additionalData[('trackingNumber_' ++ incIndex)]
      }))

基本相同,除了:

  • output => %output
  • String => :string