我們昨天充實而認真的複習了 JSON ,今天繼續向前邁進啦~
師傅:徒弟,今天我們用curl
從一個網站取回單一物件。
徒弟:好的,師傅,這個網站是哪個呢?
師傅:就是https://jsonplaceholder.typicode.com/todos/1
,這裡有個 TODO。
徒弟:哦,明白了,然後我用curl
發送請求,是吧?
師傅:對,命令是:curl https://jsonplaceholder.typicode.com/todos/1
。
徒弟:這樣我就能拿到這個物件了……然後呢?
師傅:接下來用jq
來看裡面有什麼寶藏。
徒弟:那我應該怎麼寫?是用jq
提取title
嗎?
師傅:對,正確!命令是:curl https://jsonplaceholder.typicode.com/todos/1 | jq ".title"
。
徒弟:這樣我就能看到 TODO 的標題了,對嗎?
師傅:沒錯!就像打開一份秘密文件。
徒弟:如果我想要看到completed
的狀態呢?
師傅:很簡單,改成jq ".completed"
。
徒弟:所以我應該這樣寫:curl https://jsonplaceholder.typicode.com/todos/1 | jq ".completed"
?
師傅:對,太棒了!你學得像喝水一樣輕鬆。
徒弟:還有其他用法嗎?比如回傳整個物件?
師傅:當然!用jq "."
,就像全景式的電影。
徒弟:所以命令是curl https://jsonplaceholder.typicode.com/todos/1 | jq "."
?
師傅:正確!讓你一次看到所有內容。
在 Day2: curl 與 jq 起手式 ,我們執行了以下指令:
curl https://jsonplaceholder.typicode.com/todos/1 | jq
這個指令省略了 | jq
後面的 "filter 表達式",所以執行的結果是預設的讀取文字輸入、輸出為 JSON 。而這個 "filter 表達式" 其實才是真正的重頭戲 —— jq 的主要程式。
.
identity operator (恆等運算子).
稱作 identity operator(恆等運算子),是最基礎的 filter。
在指令 | jq
後面接著使用 "."
作為 filter 表達式,輸出結果會跟我們上面執行的指令(沒有給 filter)一樣;也就是預設的過濾結果: 將原本輸入的文字原封不動的輸出為JSON。
curl https://jsonplaceholder.typicode.com/todos/1 | jq "."
❗注意: |
---|
使用 Windows 命令提示字元,filter 表達式最外層要使用雙引號 " ;Powershell, Unix shell 則是使用 單引號' |
.foo
Object Identifier-Index (物件屬性識別索引)最簡單有用的過濾器的形式為 .foo
。輸入 JSON 物件時,如果存在屬性「foo」, .foo
會查找該物件的「foo」屬性並輸出值,如果該屬性不存在則輸出 null。
使用 ".title"
會查找 title 屬性,並輸出該屬性的值
curl https://jsonplaceholder.typicode.com/todos/1 | jq ".title"
使用 ".title1"
會查找 title1 屬性;因為該屬性不存在,則輸出 null (參考下圖)
curl https://jsonplaceholder.typicode.com/todos/1 | jq ".title1"
今天我們學到了 jq 的主程式 ——— "filter" 的兩個表達式。一個是恆等運算子 .
,另一個是物件屬性識別索引 .foo
。 .foo
的作用非常的直觀,就是查出屬性並輸出值。學到這個屬性查找之後,有沒有躍躍欲試的fu呢? 讓我們繼續學習吧!