La expresión condicional de jq es if A then B else C end.
if-then-else es un filtro como todas las funciones integradas de jq: recibe una entrada y produce una salida.
Si la expresión A produce un valor «verdadero», el filtro if evalúa B.
De lo contrario, evalúa C.
La entrada del filtro if se pasará a B o a C.
42 | if . < 50 then "small" else "big" end # => "small"
5 | if . % 2 == 0 then . / 2 else . * 4 end # => 20
La cláusula else es opcional; las dos sentencias siguientes son equivalentes.
if A then B else . end
if A then B end
Puedes agregar más condiciones con elif.
42 | if . < 33 then "small"
elif . < 66 then "medium"
else "big"
end
# => "medium"
Usa tantas cláusulas elif como necesites.
Los únicos valores «falsos» en jq son: false y null.
Todo lo demás es «verdadero», incluso el número cero y el string vacío, el array y el objeto.
Los operadores booleanos and y or se pueden usar para construir consultas complejas.
42 | if . < 33 or . > 66 then "big or small"
else "medium"
end
Para negar, usa not. Esto es un filtro, no un operador.
42 | if (. < 33 or . > 66 | not) then "medium"
else "big or small"
end
El operador alternativo te permite especificar un valor «predeterminado» si una expresión es falsa o nula.
A // B
# This is identical to
if A then A else B end
Para demostrarlo
[3, 5, 18] | add / 2 # => 13
[] | add / 2 # => error: null (null) and number (2) cannot be divided
[] | add // 0 / 2 # => 0
Quienes vienen de otros lenguajes de programación podrían esperar una mayor variedad de comandos condicionales, como cond, case, switch, when, unless, un operador ternario, etc.
Los operadores de la lista anterior son todo lo que jq ofrece.