if এক্সপ্রেশনjq-এর শর্তসাপেক্ষ এক্সপ্রেশন হলো if A then B else C end।
jq-এর সব বিল্টইনের মতোই if-then-else একটি ফিল্টার: এটি একটি ইনপুট নেয় আর একটি আউটপুট তৈরি করে।
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। বাকি সবকিছুই "ট্রু", এমনকি শূন্য সংখ্যা, খালি স্ট্রিং, অ্যারে আর অবজেক্টও।
জটিল কোয়েরি তৈরি করতে বুলিয়ান অপারেটর 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-তে যা যা আছে তার সবকিছু।