问题描述
我正在学习 dwlang.fun 上的 Dataweave 教程(强烈推荐!),我终于被使用对象一章的 pluck 部分难住了。输入是我需要按订单 ID 分组的四个订单行的单个数组。 输入是
[
{
"orderId" : 1,"customer" : "Josh","lineId" : 1,"lineItem" : "Shoes","price" : 50
},{
"orderId" : 1,"lineId" : 2,"lineItem" : "Socks","price" : 20
},{
"orderId" : 2,"customer" : "Mariano","lineId" : 3,"lineItem" : "Shirt","price" : 30
},"lineId" : 4,"lineItem" : "Jacket","price" : 80
}
]
并且所需的输出是一个单独的数组,在其自己的数组中包含每个订单:
[
[
{
"orderId": 1,"customer": "Josh","lineId": 1,"lineItem": "Shoes","price": 50
},{
"orderId": 1,"lineId": 2,"lineItem": "Socks","price": 20
}
],[
{
"orderId": 2,"customer": "Mariano","lineId": 3,"lineItem": "Shirt","price": 30
},{
"orderId": 2,"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,"2": [
{
"orderId": 2,"price": 80
}
]
}
解决方法
我不确定 myData 是否有用,我已将其删除。我在 groupBy() 之后使用了 pluck() 来收集每个组键的值,这似乎是预期的:
%dw 2.0
output application/json
---
payload
groupBy ((order,index) -> order.orderId)
pluck ((value,key,index) -> value)
,
这里有一个替代解决方案(没有采摘)
%dw 2.0
output application/json
var groupedOrders=payload groupBy (item,index) -> item.orderId
---
(groupedOrders mapObject(v0,k0) ->
{
'key':(v0)
}).*'key'