使用 Dasel v3 进行数据探索
<when_to_use>
当以下情况时激活此技能:
- 探索不熟悉的结构化数据文件(配置、API 响应、数据集)
- 在修改文档之前发现其模式或形状
- 调查嵌套的配置结构(Kubernetes 清单、CI 流水线、包文件)
- 对大型数组或深度嵌套的对象进行采样以理解内容
- 在转换或提取之前识别数据类型
</when_to_use>
支持的格式
Dasel 会根据文件扩展名自动检测格式。当从标准输入读取或扩展名不明确时,使用 -i <format> 覆盖。
格式标识符:json、yaml、toml、xml、csv、hcl、ini
通用探索工作流
遇到未知的结构化数据文件时,请按以下顺序进行操作。每一步都会缩小范围。
Step 1 — 格式检测
Dasel 根据文件扩展名推断格式。对于标准输入或非标准扩展名,请明确指定:
cat mystery_file | dasel -i json 'keys($this)'
Step 2 — 顶层键
cat config.yaml | dasel -i yaml 'keys($this)'
输出:顶层键名称的数组。这始终是第一个探索命令。
Step 3 — 结构预览
对于小文件(配置、清单),转储完整文档:
cat config.yaml | dasel -i yaml
对于大文件,请跳至 Step 4。
Step 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)'
Step 5 — 数组采样
预览前几个元素,无需加载整个数组:
cat data.json | dasel -i json 'items[0:3]'
单个元素检查:
cat data.json | dasel -i json 'items[0]'
Step 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"
Step 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)