Добавьте еще один элемент к объектному массиву внутри для каждого цикла в mule 3

#mule #dataweave

#mule #сохранение данных

Вопрос:

У меня есть входные данные, как показано ниже

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

Я бы повторил эту коллекцию в цикле для каждого и добавил бы еще один элемент Age к каждому объекту.
Мой ожидаемый результат был бы следующим

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

Любая помощь была бы высоко оценена. Заранее спасибо.

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

1. Вы пытаетесь отправить список карт или объект JSON в качестве входных данных?

Ответ №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 as, поскольку была изменена полезная нагрузка внутри for-each. Итак, я попробовал использовать Expression component. Ниже приведен мой конфигурационный 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>