L'espressione condizionale di jq è if A then B else C end.
if-then-else è un filtro come tutti i built-in di jq: prende un input e produce un output.
Se l'espressione A produce un valore «truthy», il filtro if valuta B.
Altrimenti valuta C.
L'input del filtro if viene passato 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 clausola else è facoltativa: le due istruzioni seguenti sono equivalenti.
if A then B else . end
if A then B end
Si possono aggiungere altre condizioni con elif.
42 | if . < 33 then "small"
elif . < 66 then "medium"
else "big"
end
# => "medium"
Usa tutte le clausole elif che ti servono.
Gli unici valori «falsi» in jq sono false e null.
Tutto il resto è «vero», persino il numero zero e la stringa, l'array e l'oggetto vuoti.
Gli operatori booleani and ed or si possono usare per costruire query complesse.
42 | if . < 33 or . > 66 then "big or small"
else "medium"
end
Per negare, usa not. Questo è un filtro, non un operatore.
42 | if (. < 33 or . > 66 | not) then "medium"
else "big or small"
end
L'operatore alternativo ti permette di specificare un valore «predefinito» se un'espressione è falsa o null.
A // B
# This is identical to
if A then A else B end
Per dimostrarlo
[3, 5, 18] | add / 2 # => 13
[] | add / 2 # => error: null (null) and number (2) cannot be divided
[] | add // 0 / 2 # => 0
Chi programma venendo da linguaggi diversi potrebbe aspettarsi una varietà più ampia di comandi condizionali, come cond, case, switch, when, unless, un operatore ternario e così via.
Gli operatori elencati sopra sono tutto ciò che jq offre.