#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>