Циклы «for» и «while»#
Цикл «for»#
Описание#
Цикл «for» предназначен для обработки повторяющихся элементов в XML или массива в JSON.
Синтаксис#
Цикл имеет формат:
for($<идентификатор переменной> : <адрес элемента>) { <тело цикла> }
При каждой итерации цикла в переменную <идентификатор переменной> записывается ссылка на текущий обрабатываемый элемент и выполняется тело цикла, область действия переменной только тело цикла.
Если элемент сообщения не является массивом JSON или единственным элементом XML, то цикл выполнится один раз. В случае отсутствия элемента в сообщении тело цикла не выполнится.
Примеры использования цикла «for»#
Пример 1#
Входящее сообщение:
{
"a": 9.25,
"b": 3,
"d": 5
}
Правило трансформации:
for($testVar: IN.a) {
OUT.test1 = exp($testVar)
OUT.test2 = sqrt($testVar)
OUT.test3 = negate($testVar)
OUT.test4 = pow($testVar, In.b)
OUT.test5 = pow($testVar, In.d)
OUT.test6 = round($testVar)
}
Выходящее сообщение:
{
"test1":10404.565716560723,
"test2":3.0413812651491097,
"test3":-9.25,
"test4":791.453125,
"test5":67718.7080078125,
"test6":9.0}
Цикл «while»#
Описание#
Цикл «while» выполняет блок кода в теле, пока условие: истина. Особое внимание необходимо уделить условию и его модификации в теле, иначе возможно получить бесконечный цикл.
Синтаксис#
Цикл имеет формат:
while(<условие>) { <тело_цикла> }
Примеры использования цикла «while»#
Пример 1#
Входящее сообщение:
{
"a": 10,
"b": 7
}
Правило трансформации:
define index = In.a
OUT.original = $index
while($index > In.b) {
define index = $index - 1
OUT.changed = $index
}
Выходящее сообщение:
{"original":10,"changed":7.0}
Пример 2#
Входящее сообщение:
{
"root":{
"test1":[
"test11",
"test12",
"test13"
]
}
}
Правило трансформации:
define index = 1i
while($index < 3) {
OUT.testArray[+>] = IN.root.test1[$index]
define index = $index + 1
}
Выходящее сообщение:
{"testArray":["test12","test13"]}