Генерация всех возможных комбинаций из двух списков массивов json с использованием dataweave

Я работаю над mule 3.9. Во время работы я столкнулся со сценарием, в котором я хочу сгенерировать все возможные комбинации значений из входящего списка массивов JSON. Значения в списке массивов json являются динамическими.

Я хочу сгенерировать вывод в формате xml. Я хочу добиться этого только с помощью dataweave. Пожалуйста, помогите мне, как добиться этого в mule 3.9, используя datawevae.

Ниже мой ввод JSON и требуемый вывод xml.

Примечание. Список массивов Json является динамическим.

Ввод JSON

 "building":[  
      {  
         "code":"BuildingExcess",
         "value":"600"
      },
      {  
         "code":"BuildingExcess",
         "value":"700"
      }
   ],
"content":[  
      {  
         "code":"ContentExcess",
         "value":"600"
      },
      {  
         "code":"ContentExcess",
         "value":"400"
      }
]

Выход

  <resultset>
    <list>
        <Building>
            <code>BuildingExcess</code>
            <value>600</value>
        </Building>
        <Content>
            <code>ContentExcess</code>
            <value>600</value>
        </Content>
    </list>
    <list>
        <Building>
            <code>BuildingExcess</code>
            <value>700</value>
        </Building>
        <Content>
            <code>ContentExcess</code>
            <value>600</value>
        </Content>
    </list>
    <list>
        <Building>
            <code>BuildingExcess</code>
            <value>600</value>
        </Building>
        <Content>
            <code>ContentExcess</code>
            <value>400</value>
        </Content>
    </list>
    <list>
        <Building>
            <code>BuildingExcess</code>
            <value>700</value>
        </Building>
        <Content>
            <code>ContentExcess</code>
            <value>400</value>
        </Content>
    </list> 
</resultset>

person Aseem    schedule 18.10.2018    source источник


Ответы (1)


Предполагая, что ваши два списка всегда building и content, и они являются элементами вашей полезной нагрузки (или некоторой переменной), вы можете использовать следующий код dataweave для достижения желаемого результата:

%dw 1.0
%output application/xml
%var input = {
    "building":[  
          {  
             "code":"BuildingExcess",
             "value":"600"
          },
          {  
             "code":"BuildingExcess",
             "value":"700"
          }
       ],
    "content":[  
          {  
             "code":"ContentExcess",
             "value":"600"
          },
          {  
             "code":"ContentExcess",
             "value":"400"
          }
    ]   
}
---
resultset: {( 
    flatten (input.content map ((cont) -> input.building map 
        list: {
            Building: $,
            Content: cont
        })
    )
)}

Выход:

<?xml version='1.0' encoding='windows-1252'?>
<resultset>
  <list>
    <Building>
      <code>BuildingExcess</code>
      <value>600</value>
    </Building>
    <Content>
      <code>ContentExcess</code>
      <value>600</value>
    </Content>
  </list>
  <list>
    <Building>
      <code>BuildingExcess</code>
      <value>700</value>
    </Building>
    <Content>
      <code>ContentExcess</code>
      <value>600</value>
    </Content>
  </list>
  <list>
    <Building>
      <code>BuildingExcess</code>
      <value>600</value>
    </Building>
    <Content>
      <code>ContentExcess</code>
      <value>400</value>
    </Content>
  </list>
  <list>
    <Building>
      <code>BuildingExcess</code>
      <value>700</value>
    </Building>
    <Content>
      <code>ContentExcess</code>
      <value>400</value>
    </Content>
  </list>
</resultset>
person Brad Cooper    schedule 18.10.2018