這次山陀兒颱風位置特殊,又幾乎滯留,在家防颱注意安全~ 繼續使用颱風的資料做練習吧
徒弟:師傅,如果我 .movingDirection 希望用中文字和箭頭顯示,可以怎麼做呢?
師傅:用 if-then-else 結構。
徒弟:哦,是像我們之前學的那樣嗎?可以給我一個例子嗎?
師傅:看這個:
.movingDirection | if . == "N" then "北 ↑"
elif . == "S" then "南 ↓"
elif . == "E" then "東 →"
elif . == "W" then "西 ←"
else . end
徒弟:我明白了。這樣就可以把 E,W,S,N 轉換成中文和箭頭了。但如果是複合方向呢?
師傅:很好的問題。試著完成更多的方向。
徒弟:讓我試試...是不是這樣:
.movingDirection | if . == "N" then "北 ↑"
elif . == "S" then "南 ↓"
elif . == "E" then "東 →"
elif . == "W" then "西 ←"
elif . == "NE" then "東北 ↗"
elif . == "SE" then "東南 ↘"
elif . == "SW" then "西南 ↙"
elif . == "NW" then "西北 ↖"
else . end
師傅:很好。還有 "NNE" 這種三個組合的,可以自己試試。
jq 的 if-then-else-end
用法,就是我們熟悉的 "如果 (條件1) 成立,那就 A ;否則就 B 結束",有多個條件的時候,使用 elif
。需要注意的條件式裡的輸入的資料,如果輸入單純是字串,可以用 .
恆等運算子;如果是物件的時候,就要使用 .foo
物件屬性識別索引。
認識 if-then-else-end
用法之後,我們就可以修改颱風消息中,.movingDirection
欄位的顯示結果,如下:
(.movingDirection | if . == \"N\" then \"北 ↑\" elif . == \"S\" then \"南 ↓\" elif . == \"E\" then \"東 →\" elif . == \"W\" then \"西 ←\" else . end)
修改前後對照結果如下:
修改前 | |
---|---|
修改後 |
用中文和箭頭標示方向,有沒有比較親切呢?
今天我們認識了 jq 的 if-then-else-end
用法,用法和其他語言差異不大,簡單實用。今天的修改可以可參考 原始碼 。
不過...我們的主程式是不是有點長? 接下來可以來點...重構。😁
颱風天請注意安全~