Mulesoft: как отображать и группировать данные с одним и тем же ключом в mule 4 dataweave 2.0 - PullRequest
0 голосов
/ 09 мая 2020

Я мог бы преобразовать свой ввод с помощью значения фильтра для каждого и суммы, чтобы получить выходной формат (многие данные будут добавлены в массив). Но для каждого потребовалось много времени. Как я могу быстрее сопоставить его с сообщением преобразования? Пожалуйста, помогите мне решить эту проблему.

Мой ввод:

{
  "PART_NUMBER": "501-239",
  "HUBS": [
    {
      "NAME": "SUK",
      "SUB_INVENTORIES": [
        {
          "NAME": "FG",
          "LOCATORS": [
            {
              "NAME": "FGACCESSORY"
            }
          ]
        }
      ]
    },
    {
      "NAME": "SUK",
      "SUB_INVENTORIES": [
        {
          "NAME": "FG",
          "LOCATORS": [
            {
              "NAME": "FGPB"
            }
          ]
        }
      ]
    },
    {
      "NAME": "SUK",
      "SUB_INVENTORIES": [
        {
          "NAME": "RAWWIP",
          "LOCATORS": [
            {
              "NAME": "FLOOR"
            }
          ]
        }
      ]
    },
    {
      "NAME": "SUK",
      "SUB_INVENTORIES": [
        {
          "NAME": "RAWWIP",
          "LOCATORS": [
            {
              "NAME": "VANTAGE"
            }
          ]
        }
      ]
    },
    {
      "NAME": "SUS",
      "SUB_INVENTORIES": [
        {
          "NAME": "FG",
          "LOCATORS": [
            {
              "NAME": "FGACCESSORY"
            }
          ]
        }
      ]
    },
    {
      "NAME": "SUS",
      "SUB_INVENTORIES": [
        {
          "NAME": "FG",
          "LOCATORS": [
            {
              "NAME": "FGPB"
            }
          ]
        }
      ]
    },
    {
      "NAME": "SUS",
      "SUB_INVENTORIES": [
        {
          "NAME": "RAWWIP",
          "LOCATORS": [
            {
              "NAME": "FLOOR"
            }
          ]
        }
      ]
    },
    {
      "NAME": "SUS",
      "SUB_INVENTORIES": [
        {
          "NAME": "RAWWIP",
          "LOCATORS": [
            {
              "NAME": "VANTAGE"
            }
          ]
        }
      ]
    }
  ]
}

Ожидаемый результат: (Мне нужно сгруппировать все концентраторы и все под_инвентаризы с тем же именем)

 {
   "PART_NUMBER": "501-239",
   "HUBS": [
     {
       "NAME": "SUK",
       "SUB_INVENTORIES": [
         {
           "NAME": "FG",
           "LOCATORS": [
             {
               "NAME": "FGACCESSORY"
             },
             {
               "NAME": "FGPB"
             }
           ]
         },
         {
           "NAME": "RAWWIP",
           "LOCATORS": [
             {
               "NAME": "FLOOR"
             },
             {
               "NAME": "VANTAGE"
             }
           ]
         }
       ]
     },
     {
       "NAME": "SUS",
       "SUB_INVENTORIES": [
         {
           "NAME": "FG",
           "LOCATORS": [
             {
               "NAME": "FGACCESSORY"
             },
             {
               "NAME": "FGPB"
             }
           ]
         },
         {
           "NAME": "RAWWIP",
           "LOCATORS": [
             {
               "NAME": "FLOOR"
             },
             {
               "NAME": "VANTAGE"
             }
           ]
         }
       ]
     }
   ]
 }

Пожалуйста, дайте мне совет!

1 Ответ

1 голос
/ 10 мая 2020

Попробуйте это:

%dw 2.0
output application/dw
---
do {
    var hubs = payload.HUBS groupBy $.NAME
    ---
    {
        PART_NUMBER: payload.PART_NUMBER,
        HUBS: (
            hubs mapObject do {
                var subs = flatten($.*SUB_INVENTORIES) groupBy $.NAME
                ---
                {($$): {
                    NAME: $$,
                    SUB_INVENTORIES: (
                        subs mapObject do {
                            var locs = flatten($.*LOCATORS)
                            ---
                            {($$): {
                                NAME: $$,
                                LOCATORS: locs
                            }}
                        }
                    ) pluck $
                }}
            }
        ) pluck $
    }
}

Должен быть способ сделать это лучше, чем то, что я сделал - т.е. мне не нравится вложение одного и того же выражения (по большей части) три раза. Я просто пока этого не вижу и трачу на это достаточно времени :).

Надеюсь, это поможет.

...