итерация ключа json в DW mule - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть следующее требование: необходимо включить динамический ключ 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"
    }
  ]
}

дата отправки, способ доставки, номер для отслеживания могут быть n чисел.Как выполнить итерацию с помощью ключа JSON.

1 Ответ

0 голосов
/ 15 февраля 2019

Сначала 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
...