Как удалить ранее отображенное поле с изменением имени ключа в json в муле dataweave - PullRequest
0 голосов
/ 29 октября 2018

это мой вход

`[{" 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", "ifiedDt ":" 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": «ИБП Ground2», «trackingNumber_3»: «333», «trackingNumber_1»: «2222», «trackingNumber_2»: «221»}

}] `

ожидаемый результат - удалить имя ключа, похожее на дату отправки, номер отслеживания, способ доставки. может варьироваться от shipdate_1 до n.

{ "имя атрибута": { "quoteId": "d0594c02-fb0e-47e1-a61e-1139dc185657", "clientReferenceId": "Srites004", "ifiedDt ":" 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": "Земля ИБП", - подлежит удалению "shipMethod_3": "ИБП Ground3", - подлежит удалению "shipMethod_2": "ИБП Ground2", - подлежит удалению "trackingNumber_3": "333", - подлежит удалению "trackingNumber_1": "2222", - подлежит удалению «trackingNumber_2»: «221» - подлежит удалению } 1011 * *

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете использовать оператор mapObject для перебора ключей и отфильтровывания ключей, которые вы хотите исключить. Что-то вроде

%dw 1.0
%output application/json skipNullOn="everywhere"
---
attribute_name : payload.additionalData[0] mapObject {
    (($$) : $) when  not ( ($$ contains "shipDate") or ($$ contains "shipMethod") or ($$ contains "trackingNumber") )
 } 

Обновление: для динамических имен полей Определить свойство как

property.field.name=shipDate,shipMethod,trackingNumber

Обновленный код: -

%dw 1.0
%output application/json skipNullOn="everywhere"
%var fields = p("property.field.name") splitBy ","
%function checkField(key)  (sizeOf (fields filter (key contains $))) == 0
---
attribute_name : payload.additionalData[0] mapObject {
    (($$) : $) when checkField($$) 
 }

Надеюсь, это поможет.

...