#dataweave #mulesoft
#dataweave #mulesoft
Вопрос:
У меня есть данные JSON в Dataweave. Я бы хотел сгруппировать продукты.plu затем суммирует количество.
пожалуйста, смотрите Ниже ввод и желаемый результат. Спасибо
{
"brandCode": "XXX",
"storeCode": "XX100",
"products": [
{
"plu": "NF0A529SWE7100L",
"qty": 2.000
},
{
"plu": "NF0A529SWE7100L",
"qty": -1.000
},
{
"plu": "NF0A529SWE7100M",
"qty": 2.000
}
]
}
Желаемый результат:
{
"brandCode": "XXX",
"storeCode": "XX100",
"products": [
{
"plu": "NF0A529SWE7100L",
"qty": 1.000
},
{
"plu": "NF0A529SWE7100M",
"qty": 2.000
}]
}
Комментарии:
1. извините, я не видел вашего комментария. не могли бы вы опубликовать еще раз
2. Я не оставил ничего, хотя просто примечание, чтобы убедиться, что вы проверяете объект ввода и вывода в редакторе json или xml, прежде чем публиковать их здесь. Также, если вы предоставляете свой фрагмент кода (предоставьте полный фрагмент), используйте блок кода, чтобы сделать его читаемым .
Ответ №1:
мой код приведен ниже
{
"brandCode": payload.brandCode,
"storeCode": payload.storeCode,
"products":
payload.products groupBy $.plu distinctBy $ pluck $ map{
"plu": $.storeCode,
"qty": (sum($.qty)),
но вывод:plu — это массив (например: «plu»: [«NF0A529SWE7100L»])
я должен использовать min ($.plu),
могу ли я узнать, есть ли у нас лучший метод?
Ответ №2:
Одним из подходов может быть (использование вашего кода)
Ввод:
{
"brandCode": "XXX",
"storeCode": "XX100",
"products": [
{
"plu": "NF0A529SWE7100L",
"qty": 2.000
},
{
"plu": "NF0A529SWE7100L",
"qty": -1.000
},
{
"plu": "NF0A529SWE7100M",
"qty": 2.000
}
]
}
Скрипт:
%dw 2.0
output application/json
---
{
"brandCode": payload.brandCode,
"storeCode": payload.storeCode,
"products": payload.products groupBy $.plu pluck $ map {
plu: $[0].plu,
qty:sum($.qty)
}
}
Вывод:
{
"brandCode": "XXX",
"storeCode": "XX100",
"products": [
{
"plu": "NF0A529SWE7100L",
"qty": 1.000
},
{
"plu": "NF0A529SWE7100M",
"qty": 2.000
}
]
}
Комментарии:
1. Можно было бы просто использовать
plu: $$
внутри pluck, поскольку это ссылка на ключ
Ответ №3:
на Mule 4.3.x DW 2.3.x
%dw 2.0
output application/json
fun sumProducts(data: Object): Object = (
data update {
case .products ->
data.products groupBy $.plu pluck (value, key, index) ->
{
plu: key,
qty: sum(value.qty default [])
}
}
)
---
sumProducts(payload)