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
elif की मदद से और शर्तें जोड़ी जा सकती हैं।
42 | if . < 33 then "small"
elif . < 66 then "medium"
else "big"
end
# => "medium"
आपको जितने elif क्लॉज़ चाहिए, उतने इस्तेमाल कीजिए।
jq में सिर्फ false और null ही "गलत" वैल्यू हैं। बाकी सब कुछ "सही" है, यहाँ तक कि शून्य संख्या और खाली स्ट्रिंग, खाली ऐरे और खाली ऑब्जेक्ट भी।
जटिल क्वेरी बनाने के लिए बूलियन ऑपरेटर 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
वैकल्पिक ऑपरेटर की मदद से आप बता सकते हैं कि कोई एक्सप्रेशन गलत या 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 देता है।