#mule #mule-studio #dataweave #mulesoft #mule-esb
#мул #mule-studio #dataweave #mulesoft #mule-esb
Вопрос:
Привет, у меня есть полезная нагрузка json, в которой у нас есть цикл, как показано ниже.
{
"ABC":[
{
"BCD":[
{
"ABC":[
{
"BCD":[
{
"ABC":[
{
"BCD":[]-> Repeats till we get null
}
]
}
]
}
]
}
]
}
]
}
приведенный выше цикл будет продолжаться до тех пор, пока мы не получим значение null, которое будет отличаться для разных полезных данных. Это способ, которым мы можем задать логику, подобную тому, что цикл должен продолжаться, пока у нас не будет нулевого значения, ожидается, что мой вывод будет в XML
Комментарии:
1. Всегда добавляйте пример ввода, ожидаемый результат и, если вы пробовали использовать какой-либо подход до сих пор.
2. Привет @Sumanth Reddy. Как говорит Салим, важно иметь результат, которого вы хотите достичь в этом случае, потому что решение может меняться. Например, простое использование
output application/xml --- payload
обеспечит правильный XML, но не уверен, что это то, что вам нужно.
Ответ №1:
Вот небольшая хитрость для эмуляции выполнения в сценариях datawave.
укажите конец итераций (для эмуляции while). Самый простой способ — использовать значение в качестве аккумулятора и знак в качестве индикатора. При накоплении итогового значения отрицательный результат указывает на конец циклов.
%dw 2.0
var x=[1,2,3,4,5]
output application/json
---
-(x reduce (item, acc=0) -> if (item <4 and acc >= 0) acc item else if (acc>0) -acc else acc)
Для сбора результатов может использоваться некоторый сложный объект, а также иметь индикатор окончания цикла как часть объекта
%dw 2.0
var x=[1,2,3,4,5]
output application/json
---
(x reduce (item, acc={sum:0}) -> if (item < 4 and acc.end==null ) (acc - 'sum' {sum: acc.sum item}) else ( acc {end:true} )).sum
Используйте свое условие (например, null), чтобы завершить цикл.