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
}
})
})
}
我有这个 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
}
})
})
}