Η έκφραση υπό συνθήκη του jq είναι if A then B else C end.
Το if-then-else είναι ένα φίλτρο όπως όλα τα ενσωματωμένα του jq: παίρνει μια είσοδο και παράγει μια έξοδο.
Αν η έκφραση A παράγει μια τιμή που θεωρείται αληθής, τότε το φίλτρο if αξιολογεί το B.
Διαφορετικά, αξιολογεί το C.
Η είσοδος του φίλτρου if περνάει στο B ή στο C.
42 | if . < 50 then "small" else "big" end # => "small"
5 | if . % 2 == 0 then . / 2 else . * 4 end # => 20
Η ρήτρα else είναι προαιρετική. Οι δύο παρακάτω εντολές είναι ισοδύναμες.
if A then B else . end
if A then B end
if
Μπορείς να προσθέσεις κι άλλες συνθήκες με το elif.
42 | if . < 33 then "small"
elif . < 66 then "medium"
else "big"
end
# => "medium"
Χρησιμοποίησε όσες ρήτρες elif χρειάζεσαι.
Οι μόνες τιμές που θεωρούνται ψευδείς στο jq είναι: false και null.
Όλα τα υπόλοιπα θεωρούνται αληθή, ακόμα και το μηδέν και η κενή συμβολοσειρά, ο κενός πίνακας και το κενό αντικείμενο.
Οι τελεστές Boolean and και or μπορούν να χρησιμοποιηθούν για να φτιάξεις σύνθετα ερωτήματα.
42 | if . < 33 or . > 66 then "big or small"
else "medium"
end
Για άρνηση, χρησιμοποίησε το not. Αυτό είναι ένα φίλτρο, όχι τελεστής.
42 | if (. < 33 or . > 66 | not) then "medium"
else "big or small"
end
Ο εναλλακτικός τελεστής σου επιτρέπει να ορίσεις μια "προεπιλεγμένη" τιμή, αν μια έκφραση είναι false ή null.
A // B
# This is identical to
if A then A else B end
Για να το δείξουμε:
[3, 5, 18] | add / 2 # => 13
[] | add / 2 # => error: null (null) and number (2) cannot be divided
[] | add // 0 / 2 # => 0
Οι προγραμματιστές που έρχονται από άλλες γλώσσες ίσως περιμένουν μεγαλύτερη ποικιλία εντολών υπό συνθήκη, όπως cond, case, switch, when, unless, έναν τριμερή τελεστή κ.λπ.
Οι τελεστές που αναφέρονται παραπάνω είναι το μόνο που προσφέρει το jq.