Как реализовать группировку в Dataweave на основе первого столбца в CSV

У меня есть входящий 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]».

Любая помощь приветствуется

Спасибо

Можете ли вы привести пример того, как вы хотели бы получить результат? из вашего описания не понятно

machaval 21.05.2019 13:31

Привет - я сделал это. Я также исправил образец входящих данных, так как город не требовался. Спасибо

Steven Mark Integration 21.05.2019 14:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
1 742
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вы используете 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 - я исправил данные выборки. Спасибо

Steven Mark Integration 22.05.2019 05:26

Это работает и для нескольких ord_nbr. обновил ответ образцом вывода, который он производит для нового ввода с несколькими ord_nbr. Или вы ожидаете результат в каком-то другом формате?

Ryan Carter 22.05.2019 14:49

Идеально! - Большое спасибо

Steven Mark Integration 23.05.2019 02:30

Другие вопросы по теме