A expressão condicional do jq é if A then B else C end.
if-then-else é um filtro, como todas as funções internas do jq: recebe uma entrada e produz uma saída.
Se a expressão A produzir um valor "verdadeiro", o filtro if avalia B.
Caso contrário, avalia C.
A entrada do filtro if será passada para B ou 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 a seguir são equivalentes.
if A then B else . end
if A then B end
Outras condições podem ser adicionadas com elif.
42 | if . < 33 then "small"
elif . < 66 then "medium"
else "big"
end
# => "medium"
Use quantas cláusulas elif precisar.
Os únicos valores "falsos" em jq são: false e null.
Todo o resto é "verdadeiro", até o número zero e a string vazia, o array vazio e o objeto vazio.
Os operadores Boolean and e or podem ser usados para montar consultas complexas.
42 | if . < 33 or . > 66 then "big or small"
else "medium"
end
Para negar, use not. Isso é um filtro, não um operador.
42 | if (. < 33 or . > 66 | not) then "medium"
else "big or small"
end
O operador alternativo permite especificar um valor "padrão" se uma expressão for false ou null.
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
Programadores vindos de outras linguagens podem esperar uma variedade maior de comandos condicionais, como cond, case, switch, when, unless, um operador ternário, etc.
Os operadores listados acima são tudo o que o jq oferece.