if
L'expression conditionnelle de jq s'écrit if A then B else C end.
if-then-else est un filtre, comme toutes les fonctions natives de jq : il prend une entrée et produit une sortie.
Si l'expression A produit une valeur « vraie », le filtre if évalue B.
Sinon, il évalue C.
L'entrée du filtre if est transmise à B ou à C.
42 | if . < 50 then "small" else "big" end # => "small"
5 | if . % 2 == 0 then . / 2 else . * 4 end # => 20
La clause else est facultative ; les deux instructions suivantes sont équivalentes.
if A then B else . end
if A then B end
if imbriquéesOn peut ajouter d'autres conditions avec elif.
42 | if . < 33 then "small"
elif . < 66 then "medium"
else "big"
end
# => "medium"
Utilise autant de clauses elif que nécessaire.
Les seules valeurs « fausses » en jq sont false et null.
Tout le reste est « vrai », même le nombre zéro, ainsi que la chaîne, le tableau et l'objet vides.
Les opérateurs booléens and et or permettent de construire des requêtes complexes.
42 | if . < 33 or . > 66 then "big or small"
else "medium"
end
Pour obtenir la négation, utilise not. Il s'agit d'un filtre, et non d'un opérateur.
42 | if (. < 33 or . > 66 | not) then "medium"
else "big or small"
end
L'opérateur alternatif permet de spécifier une valeur « par défaut » lorsqu'une expression est fausse ou nulle.
A // B
# This is identical to
if A then A else B end
Pour illustrer :
[3, 5, 18] | add / 2 # => 13
[] | add / 2 # => error: null (null) and number (2) cannot be divided
[] | add // 0 / 2 # => 0
Les programmeurs venus d'autres langages peuvent s'attendre à une plus grande variété de commandes conditionnelles, comme cond, case, switch, when, unless, un opérateur ternaire, etc.
Les opérateurs listés ci-dessus sont tout ce que jq propose.