У меня есть входящий CSV-файл, который выглядит так (обратите внимание, что первое поле является общим — это номер заказа)
36319602,100,12458,HARVEY NORMAN,
36319602,101,12459,HARVEY NORMAN,
36319602,102,12457,HARVEY NORMAN,
36319601,110,12458,HARVEY NORMAN,
36319601,111,12459,HARVEY NORMAN,
36319601,112,12457,HARVEY NORMAN,
36319603,110,12458,HARVEY NORMAN,
36319603,121,12459,HARVEY NORMAN,
36319603,132,12457,HARVEY NORMAN,
Это мой текущий код Dataweave
list_of_orders: {
order: payload map ((payload01 , indexOfPayload01) -> {
order_dtl:
[{
seq_nbr: payload01[1],
route_nbr: payload01[2]
}],
order_hdr: {
ord_nbr: payload01[0],
company: payload01[3],
city: payload01[4],
}
})
}
Примером желаемого вывода будет что-то вроде этого... (это просто макет). Обратите внимание, как я хотел бы, чтобы один заголовок был сгруппирован по первому столбцу, который является номером заказа, но с несколькими строками сведений.
"list_of_orders": {
"order": [
{
"order_dtl": [
{
seq_nbr: 100,
route_nbr: 12458
},
{
seq_nbr: 101,
route_nbr: 12459
},
{
seq_nbr: 102,
route_nbr: 12457
}
],
"order_hdr":
{
ord_nbr: 36319602,
company: HARVEY NORMAN
}
}
]
}
Он работает нормально, за исключением того, что он повторяет ключ order_hdr. То, что им нужно, — это единый ключ заголовка с несколькими подробностями под ним. Группировка должна основываться на «ord_nbr: payload01[0]».
Любая помощь приветствуется
Спасибо
Привет - я сделал это. Я также исправил образец входящих данных, так как город не требовался. Спасибо





Я думаю, вы используете Dataweave 1. В dw1 этот groupBy получает желаемый результат (обратите внимание, что вы можете изменить указатели полей [0], 1 и т. д. на сопоставления имен полей, если они настроены как метаданные и т. д.):
%dw 1.0
%output application/json
---
list_of_orders: {
order: (payload groupBy ($[0])) map {
order_dtl: $ map {
seq_nbr: $[1],
route_nbr: $[2]
},
order_hdr:
{
ord_nbr: $[0][0],
company: $[0][3]
}
}}
ОБНОВИТЬ
Вот результат для нового входного образца с несколькими заказами:
{
"list_of_orders": {
"order": [
{
"order_dtl": [
{
"seq_nbr": "110",
"route_nbr": "12458"
},
{
"seq_nbr": "121",
"route_nbr": "12459"
},
{
"seq_nbr": "132",
"route_nbr": "12457"
}
],
"order_hdr": {
"ord_nbr": "36319603",
"company": "HARVEY NORMAN"
}
},
{
"order_dtl": [
{
"seq_nbr": "100",
"route_nbr": "12458"
},
{
"seq_nbr": "101",
"route_nbr": "12459"
},
{
"seq_nbr": "102",
"route_nbr": "12457"
}
],
"order_hdr": {
"ord_nbr": "36319602",
"company": "HARVEY NORMAN"
}
},
{
"order_dtl": [
{
"seq_nbr": "110",
"route_nbr": "12458"
},
{
"seq_nbr": "111",
"route_nbr": "12459"
},
{
"seq_nbr": "112",
"route_nbr": "12457"
}
],
"order_hdr": {
"ord_nbr": "36319601",
"company": "HARVEY NORMAN"
}
}
]
}
}
Извинения - я должен был предоставить лучшие образцы данных. На самом деле существует более одного ord_nbr - я исправил данные выборки. Спасибо
Это работает и для нескольких ord_nbr. обновил ответ образцом вывода, который он производит для нового ввода с несколькими ord_nbr. Или вы ожидаете результат в каком-то другом формате?
Идеально! - Большое спасибо
Можете ли вы привести пример того, как вы хотели бы получить результат? из вашего описания не понятно