使用 Dasel v3 進行資料探索
<when_to_use>
當下列情況發生時,請啟用此技能:
- 探索不熟悉的結構化資料檔案(設定檔、API 回應、資料集)
- 在修改文件之前,先發現其 schema 或形狀
- 調查巢狀的設定結構(Kubernetes 清單、CI 管線、套件檔案)
- 對大型陣列或深度巢狀物件進行取樣,以瞭解內容
- 在進行轉換或提取前,先識別資料型別
</when_to_use>
支援的格式
Dasel 會根據副檔名自動偵測格式。當從 stdin 讀取或副檔名不明確時,可使用 -i <format> 來覆寫。
格式識別碼:json、yaml、toml、xml、csv、hcl、ini
通用探索流程
遇到未知的結構化資料檔案時,請依以下順序進行。每個步驟都能縮小範圍。
步驟 1 — 格式偵測
Dasel 會根據副檔名推斷格式。對於 stdin 或非標準副檔名,請明確指定:
cat mystery_file | dasel -i json 'keys($this)'
步驟 2 — 頂層鍵
cat config.yaml | dasel -i yaml 'keys($this)'
輸出:頂層鍵名稱的陣列。這永遠是第一個探索指令。
步驟 3 — 結構預覽
對於小檔案(設定檔、清單),可直接輸出完整文件:
cat config.yaml | dasel -i yaml
對於大型檔案,請跳到步驟 4。
步驟 4 — 巢狀鍵發現
一層一層地深入:
cat config.yaml | dasel -i yaml 'server'
cat config.yaml | dasel -i yaml 'keys(server)'
cat config.yaml | dasel -i yaml 'keys(server.logging)'
跨所有深度的遞迴鍵發現:
cat config.yaml | dasel -i yaml '..keys($this)'
步驟 5 — 陣列取樣
預覽前幾個元素,不必載入整個陣列:
cat data.json | dasel -i json 'items[0:3]'
單一元素檢查:
cat data.json | dasel -i json 'items[0]'
步驟 6 — 型別檢查
判斷任何節點的型別:
cat data.json | dasel -i json 'typeOf(settings)'
cat data.json | dasel -i json 'typeOf(items[0].count)'
回傳值:"string"、"array"、"bool"、"null"、"int"、"float"
步驟 7 — 值提取
確定路徑後,提取特定值:
cat config.yaml | dasel -i yaml 'database.connection.host'
cat data.json | dasel -i json 'users[0].email'
探索模式
廣度優先探索
從根節點開始,在深入下一層之前,先列舉每一層的鍵:
cat file.json | dasel -i json 'keys($this)' # 第 0 層
cat file.json | dasel -i json 'keys(metadata)' # 第 1 層
cat file.json | dasel -i json 'keys(metadata.labels)' # 第 2 層
基於搜尋的探索(大型檔案)
當檔案太大而不適合手動遍歷時,可使用帶條件的 search():
# 尋找所有包含特定鍵的物件
cat data.json | dasel -i json 'search(has("email"))'
# 尋找同時包含 "id" 與 "name" 鍵的物件
cat data.json | dasel -i json 'search(has("id") && has("name"))'
# 尋找值符合條件的節點
cat data.json | dasel -i json 'search($this == 42)'
計算元素數量
cat data.json | dasel -i json 'len(items)'
cat data.json | dasel -i json 'len(keys($this))'
唯一值發現
從所有陣列元素中提取某個欄位,然後在 shell 中進行去重:
cat data.json | dasel -i json 'items.map(category)' | dasel -i json '$this...' | sort -u
遞迴下降
在任意深度尋找特定鍵名的所有值:
cat data.json | dasel -i json '..name'
取得每個巢狀陣列的第一個元素:
cat data.json | dasel -i json '..[0]'
特定格式的食譜
如需針對各格式的詳細探索指令,請參閱 特定格式食譜。
參考資料
- Dasel v3 文件(擷取於 2026-02-19)
- Dasel 函數索引(擷取於 2026-02-19)
- Dasel GitHub 儲存庫(擷取於 2026-02-19)