昨天我們應用 length 來計算陣列元素的數量,今天繼續學習新的 jq 函式吧。
師傅:今天我們來學習 keys
和 keys_unsorted
。
徒弟:好的,師傅。這兩個函式有什麼不同呢?
師傅:keys
返回排序後的屬性名稱,keys_unsorted
返回未排序的屬性名稱。
徒弟:哦,聽起來很直觀。能給個例子嗎?
師傅:當然。看這個:
{"c": 3, "a": 1, "b": 2}
師傅:用 keys
會得到:
["a", "b", "c"]
師傅:而 keys_unsorted
可能會得到:
["c", "a", "b"]
徒弟:我明白了。那在實際上,我們應該如何選擇使用哪一個呢?
師傅:如果你需要一致的輸出順序,用 keys
。如果順序不重要,用 keys_unsorted
可能更快。
徒弟:謝謝師傅。我會在實際使用中多加練習的。
師傅:很好。記住,理解這些細節對於高效處理 JSON 資料很重要。
師傅:我們試試用 keys
和 keys_unsorted
來處理TODO。
徒弟:好的,讓我試試。首先是 keys
:
curl https://jsonplaceholder.typicode.com/todos/1 | jq 'keys'
徒弟:結果是:
["completed", "id", "title", "userId"]
徒弟:現在試試 keys_unsorted
:
curl https://jsonplaceholder.typicode.com/todos/1 | jq 'keys_unsorted'
徒弟:結果是:
["userId", "id", "title", "completed"]
師傅:很好。你注意到兩邊的差異了嗎?
徒弟:我看到了。keys
返回的是按字母順序排序的屬性名稱,而 keys_unsorted
返回的是原始順序的屬性名稱。
師傅:正確。這就是這兩個函式的主要區別。在處理大型 JSON 資料時,這個區別可能會影響效能。
徒弟:我明白了。謝謝師傅的指導!
內建函數 keys
,當給定一個物件時,會在陣列中傳回它的屬性名稱。以 TODO 為例:
相對於 keys
函式的就是 keys_unsorted
,如果沒看到 keys_unsorted
或許還不會注意到 keys
會「排序」物件屬性的名稱;而keys_unsorted
顧名思義,就是不特別排序屬性名稱,直接按照給定的物件屬性順序,在陣列中傳回屬性名稱。下面兩張圖做對照:
keys 函式 |
keys_unsorted 函式 |
---|---|
今天認識了這 keys
和 keys_unsorted
這兩個直覺又實用的函式,當我們呼叫一個 API,通常會想去看回傳的物件有哪些資料,這時候使用 keys
就能馬上看到物件的屬性名稱;然若想要按原物件屬性的排列順序顯示,用 keys_unsorted
就比較合適。感謝星期天仍然認真學習的自己~😊