dasel v3 語法參考
單一二進位 CLI 工具,用於查詢、修改和轉換結構化資料。以統一查詢語法取代 jq + yq + xmllint,支援所有格式。
撰寫時的穩定版本(日期:2026-02-23):v3.2.3
支援格式
json, yaml, toml, xml, csv, hcl, ini
基本用法
# 從標準輸入查詢(需指定格式)
echo '{"foo": "bar"}' | dasel -i json 'foo'
# 從標準輸入讀取檔案進行查詢
cat config.yaml | dasel -i yaml 'database.host'
# 修改並輸出完整文件
echo '{"port": 3000}' | dasel -i json --root 'server.port = 8080'
# 轉換格式
cat data.json | dasel -i json -o yaml
格式處理
dasel v3 不會自動從副檔名偵測格式。沒有 -f/--file 旗標。輸入一律從標準輸入讀取。必須使用 -i 和/或 -o 明確指定格式。如果只給定一個旗標,另一個會預設為相同格式。如果兩者都未給定,則兩者都預設為 json(可經由 ~/dasel.yaml 中的 default_format 金鑰進行設定)。
來源:internal/cli/query.go:10-11, internal/cli/run.go:37-43, internal/cli/config.go:19-21
主要旗標
-i, --in <format> 輸入解析器(json, yaml, toml, xml, csv, hcl, ini)
-o, --out <format> 輸出解析器(預設為輸入格式)
--root 修改後輸出完整文件
--var <name>=<value> 將變數傳入查詢(可重複)
--compact 緊湊輸出(不美化排版)
--rw-flag <name>=<value> 讀寫旗標(例如 --rw-flag csv-delimiter=;)
--read-flag <name>=<val> 讀取旗標(例如 --read-flag xml-mode=structured)
--write-flag <name>=<val> 寫入旗標(例如 --write-flag csv-delimiter=;)
-c, --config <path> 設定檔路徑(預設:~/dasel.yaml)
核心選擇器速查表
| 選擇器 | 語法 | 範例 |
|---|---|---|
| 點記法 | foo.bar.baz | cat f.json | dasel -i json 'foo.bar' |
| 陣列索引 | [0], [2] | cat f.json | dasel -i json 'items[0]' |
| 陣列切片 | [0:3] | cat f.json | dasel -i json 'items[0:2]' |
| 遞迴下降 | .., ..name | cat f.json | dasel -i json '..name' |
| 遞迴所有值 | ..* | cat f.json | dasel -i json '..*' |
| 物件建構 | { key1, key2 } | cat f.json | dasel -i json '{ name, age }' |
| 展開運算子 | obj... | cat f.json | dasel -i json '{ defaults..., overrides... }' |
主要函式速查表
DefaultFuncCollection 中有 19 個內建函式(來源:execution/func.go:12-33),加上 sortBy 複合表達式。
| 函式 | 用途 | 範例 |
|---|---|---|
filter(pred) | 過濾陣列 | users.filter(active == true) |
map(expr) | 轉換陣列 | users.map(name) |
each(expr) | 修改每個元素 | each($this = $this * 2) |
search(pred) | 遞迴搜尋 | search(has("id")) |
sortBy(expr) | 排序陣列 | sortBy($this, desc) |
has(key) | 檢查金鑰是否存在 | has("name") |
get(key) | 取得指定金鑰/索引的值 | get("name") |
contains(val) | 檢查切片是否包含值 | contains(42) |
len(expr) | 長度 | len($this) |
join(sep) | 合併為字串 | join(",") |
sum(expr) | 數值陣列求和 | sum($this) |
add(args...) | 數字相加 | add(1, 2, 3) |
max(args...) | 最大值 | max(1, 5, 3) |
min(args...) | 最小值 | min(1, 5, 3) |
merge(args...) | 合併映射 | merge(defaults, overrides) |
keys(expr) | 取得映射的金鑰 | keys($this) |
reverse(expr) | 反轉陣列 | reverse($this) |
typeOf(expr) | 取得型別字串 | typeOf($this) |
toString(expr) | 轉型為字串 | toString($this) |
toInt(expr) | 轉型為整數 | toInt($this) |
toFloat(expr) | 轉型為浮點數 | toFloat($this) |
base64e(str) | Base64 編碼 | base64e("hello") |
base64d(str) | Base64 解碼 | base64d("aGVsbG8=") |
parse(fmt, data) | 執行時期解析資料 | parse("json", rawStr) |
readFile(path) | 讀取檔案內容 | readFile("config.json") |
ignore() | 從分支中排除 | ignore() |
修改語法
v3 移除了 put 和 delete 子命令。請使用 --root 進行賦值:
# 設定值
echo '{"count": 1}' | dasel -i json --root 'count = 42'
# 布林賦值
echo '{"enabled": false}' | dasel -i json --root 'enabled = true'
# 附加到陣列
echo '[1,2,3]' | dasel -i json --root '[$this..., 4]'
# 移除金鑰(重新建構,排除該金鑰)
echo '{"keep": "yes", "drop": "no"}' | dasel -i json --root '{ keep }'
格式轉換
# JSON 轉 YAML
cat data.json | dasel -i json -o yaml
# YAML 轉 TOML
cat config.yaml | dasel -i yaml -o toml
# TOML 轉 JSON
cat config.toml | dasel -i toml -o json
特殊變數
$root— 參考根文件$this— 參考目前節點(在each、map、filter、search內部使用)
變數賦值
# 使用分號進行多重陳述式
cat data.json | dasel -i json '$active = users.filter(active == true); $active.map(name)'
條件式
echo '{"count": 7}' | dasel -i json 'if(count > 5) { "many" } else { "few" }'
v3 重大變更(與 v2 比較)
- 移除了
put和delete子命令;請使用--root進行內聯賦值 - 移除了
-f/--file旗標;輸入一律透過管線從標準輸入讀取 - 查詢/選擇器語法已完全重新設計;v2 語法與 v3 不相容
- CLI 框架從 Cobra 改為 Kong
- Go 模組路徑改為
github.com/tomwright/dasel/v3
詳細參考
- 選擇器與語法 — 點記法、陣列、遞迴下降、物件建構、變數、條件式、比較運算子
- 函式參考 — 完整函式簽名、描述及範例
- 格式特定模式 — JSON、YAML、TOML、XML、CSV、HCL、INI 模式及轉換注意事項
來源
- dasel README: https://raw.githubusercontent.com/TomWright/dasel/master/README.md(擷取日期:2026-02-19)
- dasel 文件: https://daseldocs.tomwright.me(擷取日期:2026-02-19)
- 查詢語法: https://daseldocs.tomwright.me/syntax/query-syntax.md(擷取日期:2026-02-19)
- 函式索引: https://daseldocs.tomwright.me/functions(擷取日期:2026-02-19)
- CHANGELOG: https://raw.githubusercontent.com/TomWright/dasel/master/CHANGELOG.md(擷取日期:2026-02-19)
- 發行版本: https://github.com/TomWright/dasel/releases(擷取日期:2026-02-19)
- 原始碼分析:
execution/func.go,internal/cli/query.go,internal/cli/run.go,internal/cli/config.go,execution/execute_binary.go,execution/execute_unary.go(分析日期:2026-02-19) - 事實查核: FACT_CHECK_REPORT.md(2026-02-23)