使用dataweave从两个json数组列表生成所有可能的组合

时间:2018-10-18 13:04:33

标签: mule dataweave mule-esb

我正在研究m子3.9。在工作时,我遇到了一个场景,我想从传入的JSON数组列表中生成所有可能的价位组合。 json数组列表下的值是动态的。

我想生成xml格式的输出。我只想使用dataweave来实现。请帮助我如何使用datawevae在mule 3.9中实现此目标。

下面是我的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 :(得分:2)

假设您的两个列表始终是buildingcontent,并且它们是有效负载(或某些变量)的元素,则可以使用以下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>