Циклы «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"]}