问题描述
我在 Dataweave 中有以下 JSON 数据。我想 groupBy products.plu 然后总结数量。
请参阅下面的输入和所需的输出。谢谢
{
"brandCode": "XXX","storeCode": "XX100","products": [
{
"plu": "NF0A529SWE7100L","qty": 2.000
},{
"plu": "NF0A529SWE7100L","qty": -1.000
},{
"plu": "NF0A529SWE7100M","qty": 2.000
}
]
}
期望的输出:
{
"brandCode": "XXX","qty": 1.000
},"qty": 2.000
}]
}
解决方法
我的代码在下面
{
"brandCode": payload.brandCode,"storeCode": payload.storeCode,"products":
payload.products groupBy $.plu distinctBy $ pluck $ map{
"plu": $.storeCode,"qty": (sum($.qty)),
但 outPut :plu 是数组(例如:"plu": ["NF0A529SWE7100L"]) 我必须使用 min($.plu) , 我可以知道我们有最好的方法吗?
,一种方法可能是(使用您的代码)
输入:
{
"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,"products": payload.products groupBy $.plu pluck $ map {
plu: $[0].plu,qty:sum($.qty)
}
}
输出:
{
"brandCode": "XXX","products": [
{
"plu": "NF0A529SWE7100L","qty": 1.000
},{
"plu": "NF0A529SWE7100M","qty": 2.000
}
]
}
,
在骡子 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)