На основе сопоставления ключа и значений необходимо добавить массив объектов в dataweave - PullRequest
1 голос
/ 09 февраля 2020

Пожалуйста, помогите ниже dataweave
Вот вход

[
  {
    "item": "1",
    "quantity": "100",
    "code":"ABC"
  },
  {
    "item": "1",
    "quantity": "200",
    "code":"ABC"
  },
   {
    "item": "1",
    "quantity": "200",
    "code":"CDB"
  },
  {
    "item": "12",
    "quantity": "200",
     "code":"ABC"
  }
]

это ожидаемый вывод

[
  {
    "item": "1",
    "quantity": "300"
    "code":"ABC"
  },
   {
    "item": "1",
    "quantity": "200"
    "code":"CDB"
  },
  {
    "item": "12",
    "quantity": "200"
     "code":"ABC"
  }
]

На основе при сопоставлении ключа и значений добавление должно происходить для массива объектов. в dataweave

Ответы [ 3 ]

3 голосов
/ 09 февраля 2020

Попробуйте что-нибудь подобное ..

%dw 2.0
output application/json
---

(payload groupBy (key,index) ->(key.item ++ key.code)) mapObject {
   a: {
       item: $[0].item,
       quantity: (if (sizeOf ($)  > 1) ($.quantity reduce ($$ as Number 
                  {format: '#'} + $ as Number {format: '#'}))  else  $.quantity[0] 
                   as Number {format: "#"}),
       code:$[0].code
   }
}
2 голосов
/ 09 февраля 2020

Попробуйте это:

%dw 2.0
output application/json
var data = [
  {
    "item": "1",
    "quantity": "100",
    "code":"ABC"
  },
  {
    "item": "1",
    "quantity": "200",
    "code":"ABC"
  },
   {
    "item": "1",
    "quantity": "200",
    "code":"CDB"
  },
  {
    "item": "12",
    "quantity": "200",
     "code":"ABC"
  }
]
---
data groupBy ($.code ++ $.item) 
pluck $
reduce (e,acc=[]) -> acc + {
    item: e[0].item,
    code: e[0].code,
    quantity: sum(e.*quantity) as String
}
2 голосов
/ 09 февраля 2020

добавить pluck вместо этого mapObject .. Так что-то вроде

%dw 2.0
output application/json
---

(payload groupBy (key,index) ->(key.item ++ key.code)) pluck {
   a: {
       item: $[0].item,
       quantity: (if (sizeOf ($)  > 1) ($.quantity reduce ($$ as Number 
                  {format: '#'} + $ as Number {format: '#'}))  else  $.quantity[0] 
                   as Number {format: "#"}),
       code:$[0].code
   }
}
...