【问题标题】:Add one more element to the object array inside for each loop in mule 3为 mule 3 中的每个循环在内部的对象数组中添加一个元素
【发布时间】:2020-09-19 15:19:56
【问题描述】:

我有如下输入

[{Name=ABC, ID=123},{Name=XYZ, ID=345}]

我会在一个 for-each 循环中迭代这个集合,并为每个对象再添加一个元素 Age。 我的预期输出是这样的

[{Name=ABC, ID=123, Age=23},{Name=XYZ, ID=345, Age=24}]

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 您是要发送地图列表还是 JSON 对象作为输入?

标签: mule dataweave


【解决方案1】:

HTH..

%dw 2.0
output application/json
var inp = [
     {
         "Name":"ABC", 
         "ID":"123"
     },
     { 
         "Name":"XYZ", 
         "ID":"345"
     }
    ]
---
inp map {
  ($),
  age:  (23 + ($$)) // or your logic to derive age

}

【讨论】:

    【解决方案2】:

    使用 DW 是不可能的,因为 for-each 中的有效负载已被修改。所以我尝试使用 Expression 组件。下面是我的配置 XML。

    <flow name="add-one-more-element-to-the-original-payload">
        <poll doc:name="Poll">
            <fixed-frequency-scheduler frequency="30" timeUnit="SECONDS"/>
            <logger message="Pooling Started" level="INFO" doc:name="Log"/>
        </poll>
        <dw:transform-message doc:name="Transform Payload">
            <dw:set-payload><![CDATA[%dw 1.0
    %output application/java
    %var collection = [{"Name":"ABC","ID":123},{"Name":"XYZ","ID":345}]
    ---
    collection]]></dw:set-payload>
        </dw:transform-message>
        <set-variable variableName="outputList" value="#[new java.util.ArrayList()]" 
    doc:name="Set Variable"/>
                <foreach doc:name="For Each" collection="#[payload]">
            <dw:transform-message doc:name="CurrentPayload">
                <dw:set-variable variableName="currentPayload"><![CDATA[%dw 1.0
    %output application/java
    ---
    payload]]></dw:set-variable>
            </dw:transform-message>
            <flow-ref name="get-age-subflow" doc:name="Get Age"/>
            <expression-component doc:name="Expression"><! 
    [CDATA[flowVars.currentPayload.Age=payload.Age;]]></expression-component>
            <expression-transformer expression="# 
    [flowVars.outputList.add(flowVars.currentPayload)]" doc:name="Expression"/>
        </foreach>
        <logger message="#[flowVars.outputList]" level="INFO" doc:name="Logger"/>
    </flow>
    <sub-flow name="get-age-subflow">
        <dw:transform-message doc:name="Transform Age">
            <dw:set-payload><![CDATA[%dw 1.0
    %output application/java
    ---
    {
    Age:24
    }]]></dw:set-payload>
        </dw:transform-message>
    </sub-flow>
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2023-04-04
      • 2021-09-24
      • 2019-11-07
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      相关资源
      最近更新 更多