表格数据到嵌套 JSON

Tabular Data to Nested JSON

我正在尝试使用 MuleSoft 将表格查询输出转换为嵌套 JSON。我的查询输出如下:

----------------------------------
Customer |  Order   |   Items
----------------------------------
C       |   Order1  |   Itm1
C       |   Order1  |   Itm2
C       |   Order2  |   Itm1
C       |   Order2  |   Itm4
C       |   Order3  |   Itm3
C       |   Order3  |   Itm4

并使用 Mule4 dataweave 我试图将其转换为流动 JSON 输出:

Customer: C
Orders: {
            Order1:{
                Items: {                  
                  Item: Item1
                  Item: Item2
                }
            }
            Order2:{
                Items: {                  
                  Item: Item1
                  Item: Item4
                }
            }

            Order3:         

}

到目前为止,我已经尝试过如下代码,但没有成功:

%dw 2.0
output application/json
---

    payload map ((st, stindex) -> {
        Customer:   st.Customer,

        Orders: payload filter(($.Customer == st.Customer) and  ($.Order == st.Order)) map ((f, fIndex) ->{

            Order: f.Order      

            Items : payload filter (($.ItemName == f.ItemName) and ($.Order == f.Order)) map ((i, iIndex) -> {

                item: i.ItemName
            })

        })

    })

看来我遗漏了一些重要的东西。感谢你的帮助!!

我需要一个多级 groupBy()、mapObjects 和一个用于该项目的 reduce()。

%dw 2.0
output application/json
---
(payload map {
    Customer: $.Customer,
    Order: $.Order,
    Items: $.Items
} groupBy (item) -> item.Customer) 
    mapObject ((value, key, index) -> { 
        Customer : key, 
        Orders: (value groupBy (orders)->orders.Order) 
            mapObject ((value1, key1,  index1) -> {
                    "$(key1)": value1 reduce ((item, accumulator={}) -> accumulator ++ {Item: item.Items} )
            }     
            )
        }
      )

输出:

{
  "Customer": "C",
  "Orders": {
    "Order2": {
      "Item": "Itm1",
      "Item": "Itm4"
    },
    "Order1": {
      "Item": "Itm1",
      "Item": "Itm2"
    },
    "Order3": {
      "Item": "Itm3",
      "Item": "Itm4"
    }
  }
}

脚本的缩进很糟糕,但我已经来不及修复它了。