我正在通过DataWeave教程(极力推荐的!)在dwlang.fun上学习,最后我被“与对象一起工作”章节的“拔取”部分搞糊涂了。输入是一个由四个命令行组成的数组,我需要按顺序id对其进行分组。输入是
[
{
"orderId" : 1,
"customer" : "Josh",
"lineId" : 1,
"lineItem" : "Shoes",
"price" : 50
},
{
"orderId" : 1,
"customer" : "Josh",
"lineId" : 2,
"lineItem" : "Socks",
"price" : 20
},
{
"orderId" : 2,
"customer" : "Mariano",
"lineId" : 3,
"lineItem" : "Shirt",
"price" : 30
},
{
"orderId" : 2,
"customer" : "Mariano",
"lineId" : 4,
"lineItem" : "Jacket",
"price" : 80
}
]所需的输出是一个单独的数组,其中包含其自己数组中的每个顺序:
[
[
{
"orderId": 1,
"customer": "Josh",
"lineId": 1,
"lineItem": "Shoes",
"price": 50
},
{
"orderId": 1,
"customer": "Josh",
"lineId": 2,
"lineItem": "Socks",
"price": 20
}
],
[
{
"orderId": 2,
"customer": "Mariano",
"lineId": 3,
"lineItem": "Shirt",
"price": 30
},
{
"orderId": 2,
"customer": "Mariano",
"lineId": 4,
"lineItem": "Jacket",
"price": 80
}
]
]我的代码已接近,但分组已关闭。我的代码是
%dw 2.0
output json
var myData = payload
map (order, index) -> {
(order pluck (v, k, idx) -> {
(k): v
})
}
---
myData groupBy ((order, index) -> order.orderId)我的产出是:
{
"1": [
{
"orderId": 1,
"customer": "Josh",
"lineId": 1,
"lineItem": "Shoes",
"price": 50
},
{
"orderId": 1,
"customer": "Josh",
"lineId": 2,
"lineItem": "Socks",
"price": 20
}
],
"2": [
{
"orderId": 2,
"customer": "Mariano",
"lineId": 3,
"lineItem": "Shirt",
"price": 30
},
{
"orderId": 2,
"customer": "Mariano",
"lineId": 4,
"lineItem": "Jacket",
"price": 80
}
]
}发布于 2021-01-26 17:13:37
我不确定myData是否有用,我删除了它。我在groupBy()之后使用了pluck()来收集每个组键的值,这似乎是预期的结果:
%dw 2.0
output application/json
---
payload
groupBy ((order, index) -> order.orderId)
pluck ((value, key, index) -> value)发布于 2021-06-05 07:01:51
这里有一个替代的解决方案(没有拔掉)
%dw 2.0
output application/json
var groupedOrders=payload groupBy (item, index) -> item.orderId
---
(groupedOrders mapObject(v0,k0) ->
{
'key':(v0)
}).*'key'https://stackoverflow.com/questions/65904987
复制相似问题