if
Умовний вираз у jq записують так: if A then B else C end.
if-then-else - це фільтр, як і всі вбудовані функції jq: він приймає вхідні дані й видає вихідні дані.
Якщо вираз A дає «правдиве» значення, то фільтр if обчислює B.
Інакше він обчислює C.
Вхідні дані фільтра if буде передано до B або C.
42 | if . < 50 then "small" else "big" end # => "small"
5 | if . % 2 == 0 then . / 2 else . * 4 end # => 20
Гілка else необовʼязкова; наступні дві конструкції рівнозначні.
if A then B else . end
if A then B end
Додаткові умови можна додати за допомогою elif.
42 | if . < 33 then "small"
elif . < 66 then "medium"
else "big"
end
# => "medium"
Можна додати стільки гілок elif, скільки потрібно.
Єдині «неправдиві» значення в jq: false та null.
Усе інше вважається «правдою», навіть число нуль і порожній рядок тексту (англ. string), порожній масив та порожній обʼєкт.
Логічні оператори and та or дають змогу будувати складні запити.
42 | if . < 33 or . > 66 then "big or small"
else "medium"
end
Для заперечення використовують not. Це фільтр, а не оператор.
42 | if (. < 33 or . > 66 | not) then "medium"
else "big or small"
end
Альтернативний оператор дає змогу вказати «типове» значення, якщо вираз дає неправду або null.
A // B
# This is identical to
if A then A else B end
Щоб це продемонструвати:
[3, 5, 18] | add / 2 # => 13
[] | add / 2 # => error: null (null) and number (2) cannot be divided
[] | add // 0 / 2 # => 0
Розробники, які прийшли з інших мов, можуть очікувати більшого розмаїття умовних команд, як-от cond, case, switch, when, unless, тернарний оператор тощо.
Оператори, перелічені вище, вичерпують усе, що пропонує jq.