Как разделить объекты в массиве для генерации в виде отдельных объектов в Mule4

#mule #dataweave #mule-component #mule4

#mule #сохранение данных #mule-компонент #mule4

Вопрос:

У меня есть запрос на массив, как показано ниже.В нем может быть несколько shipping объектов, как показано ниже. В запросе 2-й объект, "shipping" имеющий два Header и двойку Details .

Здесь 1-й заголовок необходимо объединить с 1-м деталями для создания отдельных Shipping объектов, а 2-й Header необходимо объединить со 2-м Details для создания отдельных Shipping объектов и наоборот, поскольку у него есть шансы иметь больше заголовков и деталей.

Примечание: Если header присутствует, совпадение details всегда будет присутствовать таким же образом.

Запрос и ожидаемый ответ приведены ниже. Среда выполнения Mule 4.2.2

Любая идея, как ее можно реорганизовать, любые мысли о решении будут высоко оценены. Спасибо.

Запрос:

 [
  {
    "Shipping": {
      "Header": {
        "Identifier": "100",
        "SerialNo": "61",
        "ShippingDate": "10/08/1988",
        "Address1": ""
      },
      "Details": {
        "SerialNo": "61",
        "LineNo": "1",
        "Description": "Shipping Details"
      }
    }
  },
  {
    "Shipping": {
      "Header": {
        "Identifier": "100",
        "SerialNo": "62",
        "ShippingDate": "21/08/2021",
        "Address": "Test1Address"
      },
      "Header": {
        "Identifier": "100",
        "SerialNo": "62",
        "ShippingDate": "22/05/1977",
        "Address1": "Test2Address"
      },
      "Details": {
        "SerialNo": "62",
        "LineNo": "1",
        "Description": "Test1"
      },
      "Details": {
        "SerialNo": "62",
        "LineNo": "1",
        "Description": "Test2"
      }
    }
  }]
  

Ожидаемый ответ

 [
  {
    "Shipping": {
      "Header": {
        "Identifier": "100",
        "SerialNo": "61",
        "ShippingDate": "10/08/1988",
        "Address1": ""
      },
      "Details": {
        "SerialNo": "61",
        "LineNo": "1",
        "Description": "Shipping Details"
      }
    }
  },
  {
    "Shipping": {
      "Header": {
        "Identifier": "100",
        "SerialNo": "62",
        "ShippingDate": "21/08/2021",
        "Address": "Test1Address"
      },
      "Details": {
        "SerialNo": "62",
        "LineNo": "1",
        "Description": "Test1"
      }
      
    }
  },
  {
    "Shipping": {
      "Header": {
        "Identifier": "100",
        "SerialNo": "62",
        "ShippingDate": "22/05/1977",
        "Address1": "Test2Address"
      },
      "Details": {
        "SerialNo": "62",
        "LineNo": "1",
        "Description": "Test2"
      }
    }
  }]
  

Надеюсь, мой вопрос прояснится. Дайте мне знать, если требуется больше разъяснений.

Ответ №1:

В этом скрипте я попытался удалить поле повторного сопоставления, повторно используя исходные объекты.

 payload reduce ((shipping, acc=[]) -> 
    acc    (
        shipping.Shipping.*Details map ((detail, index) -> 
            {
                Shipping: { 
                    Header: shipping.Shipping.*Header[index],
                    Details:  shipping.Shipping.*Details[index] 
                }
            }
        )
    )
)
  

Вы можете сопоставить, используя *Details или *Header , который должен выдавать тот же результат

ОТРЕДАКТИРОВАНО: логика заголовка отсутствовала, и в доставке нет другого содержимого, кроме заголовка и деталей

Комментарии:

1. Потрясающе. Работает нормально, как и ожидалось. Спасибо за быстрый ответ