A expressão condicional do jq é if A then B else C end.
if-then-else é um filtro, tal como todos os builtins do jq: recebe um valor de entrada e produz um valor de saída.
Se a expressão A produzir um valor "verdadeiro", o filtro if avalia B.
Caso contrário, avalia C.
O valor de entrada do filtro if será passado a B ou a C.
42 | if . < 50 then "small" else "big" end # => "small"
5 | if . % 2 == 0 then . / 2 else . * 4 end # => 20
A cláusula else é opcional; as duas instruções seguintes são equivalentes.
if A then B else . end
if A then B end
Podes acrescentar mais condições com elif.
42 | if . < 33 then "small"
elif . < 66 then "medium"
else "big"
end
# => "medium"
Usa tantas cláusulas elif quantas precisares.
Os únicos valores "falsos" em jq são: false e null.
Tudo o resto é "verdadeiro", até o número zero e a string vazia, o array vazio e o objeto vazio.
Os operadores booleanos and e or podem ser usados para construir consultas complexas.
42 | if . < 33 or . > 66 then "big or small"
else "medium"
end
Para negar, usa not. Isto é um filtro, não um operador.
42 | if (. < 33 or . > 66 | not) then "medium"
else "big or small"
end
O operador alternativo permite-te especificar um valor "predefinido" se uma expressão for falsa ou nula.
A // B
# This is identical to
if A then A else B end
Para demonstrar
[3, 5, 18] | add / 2 # => 13
[] | add / 2 # => error: null (null) and number (2) cannot be divided
[] | add // 0 / 2 # => 0
Quem vem de outras linguagens pode estar à espera de uma maior variedade de comandos condicionais, como cond, case, switch, when, unless, um operador ternário, etc.
Os operadores acima são tudo o que o jq oferece.