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.
En caso contrario, evalúa C.
La entrada del filtro if se pasa 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 instrucciones siguientes son equivalentes.
if A then B else . end
if A then B end
Se pueden añadir 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, el string vacío, el array vacío y el objeto vacío.
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. 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 null.
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 podrían esperar una mayor variedad de comandos condicionales, como cond, case, switch, when, unless, un operador ternario, etc.
Los operadores anteriores son todo lo que ofrece jq.