Генерация всех возможных комбинаций из списка двух массивов json с использованием dataweave - PullRequest
0 голосов
/ 18 октября 2018

Я работаю над мулом 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>

1 Ответ

0 голосов
/ 19 октября 2018

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

%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>
...