csv 输入的 json 输出不正确

Incorrect json output from csv input

我有这个 csv 输入,其中 itemnumber 作为关键字段,因为每个 itemnumber 将被分配 2 房屋编号。所以我希望我的 json 输出生成如下。其中,itemnumber 将是唯一的,并且在其下应该有详细信息,它是一个对象数组,其中包含为 itemnumber 分配的 2 个 houseid。

Key,Code,Type,ItemNumber,OnHand,Time,quantity,onOrder,houseId,TimeStamp 
1,US,F,67,8,10-23-2000,0,0,010,2022-05-04 08:48:11 
1,US,F,67,8,10-23-2000,0,0,011,2022-05-04 08:48:11 
1,US,F,68,8,10-23-2000,0,0,010,2022-05-04 08:48:11 
1,US,F,68,8,10-23-2000,0,0,011,2022-05-04 08:48:11 
1,US,F,69,8,10-23-2000,0,0,010,2022-05-04 08:48:11 
1,US,F,69,8,10-23-2000,0,0,011,2022-05-04 08:48:11

JSON 中的预期输出:我想生成一个输出,其中详细信息将基于 ItemNumber。对于每个 ItemNumber,将分配 2 个房屋 ID。

{
  "price": {
    "Key": "1",
    "Code": "US",
    "Type": "F",
    "Details": [
      {
        "ItemNumber": "67",
        "Date": "10-23-2000",
        "Details": [
          {
            "OnHand": "8",
            "Quantity": "0",
            "houseDetails": {
              "houseId": "010"
            }
          },
          {
            "OnHand": "8",
            "Quantity": "0",
            "houseDetails": {
              "houseId": "011"
            }
          }
        ]
      },
      {
        "ItemNumber": "68",
        "Date": "10-23-2000",
        "Details": [
          {
            "OnHand": "8",
            "Quantity": "0",
            "houseDetails": {
              "houseId": "010"
            }
          },
          {
            "OnHand": "8",
            "Quantity": "0",
            "houseDetails": {
              "houseId": "011"
            }
          }
        ]
      },
      {
        "ItemNumber": "69",
        "Date": "10-23-2000",
        "Details": [
          {
            "OnHand": "8",
            "Quantity": "0",
            "houseDetails": {
              "houseId": "010"
            }
          },
          {
            "OnHand": "8",
            "Quantity": "0",
            "houseDetails": {
              "houseId": "011"
            }
          }
        ]
      }
    ]
  }
}

您可以使用 groupBy 函数获得所需的输出。此函数将一个数组作为输入,并使用一个函数来获取要在其上对有效负载进行分组的字段。因此,在您的情况下,您需要根据 ItemNumber 键对有效负载进行分组。

您可以在 official documentation 上阅读有关此功能的更多信息,以更好地理解解决方案。

之后你只需要一个简单的 map 函数来映射到你需要的格式。

%dw 2.0
output application/json  
---
{
  Key: payload[0].Key,
  Code: payload[0].Code,
  "Type": payload[0].Type,
  Details: payload groupBy $.ItemNumber 
            pluck $ 
            map ((item) -> {
                ItemNumber: item[0].ItemNumber,
                Time: item[0].Time,
                Details: item map ((itemDetail) -> {
                OnHand: itemDetail.OnHand,
                Quantity: itemDetail.quantity,
                houseDetails: {
                    houseId: itemDetail.houseId
                }
            })
        })
}