Skill

data-exploration

Use when exploring unknown structured data files with dasel v3 — discover schema, list keys, find nested values, sample arrays, identify data types across JSON, YAML, TOML, XML, CSV, HCL, INI formats

From dasel
Install
1
Run in your terminal
$
npx claudepluginhub jamie-bitflight/claude_skills --plugin dasel
Tool Access

This skill uses the workspace's default tool permissions.

Supporting Assets
View in Repository
references/format-recipes.md
Skill Content

Data Exploration with Dasel v3

<when_to_use>

Activate this skill when:

  • Exploring unfamiliar structured data files (config, API responses, datasets)
  • Discovering the schema or shape of a document before modifying it
  • Investigating nested config structures (Kubernetes manifests, CI pipelines, package files)
  • Sampling large arrays or deeply nested objects to understand content
  • Identifying data types before transformation or extraction

</when_to_use>

Supported Formats

Dasel auto-detects format from file extension. Override with -i <format> when reading from stdin or when extension is ambiguous.

Format identifiers: json, yaml, toml, xml, csv, hcl, ini

Universal Exploration Workflow

Follow this sequence when encountering an unknown structured data file. Each step narrows scope.

Step 1 — Format Detection

Dasel infers format from file extension. For stdin or non-standard extensions, specify explicitly:

cat mystery_file | dasel -i json 'keys($this)'

Step 2 — Top-Level Keys

dasel -f config.yaml 'keys($this)'

Output: array of top-level key names. This is always the first exploration command.

Step 3 — Structure Preview

For small files (configs, manifests), dump the full document:

dasel -f config.yaml

For large files, skip to Step 4.

Step 4 — Nested Key Discovery

Navigate level by level:

dasel -f config.yaml 'server'
dasel -f config.yaml 'keys(server)'
dasel -f config.yaml 'keys(server.logging)'

Recursive key discovery across all depths:

dasel -f config.yaml '..keys($this)'

Step 5 — Array Sampling

Preview first few elements without loading entire array:

dasel -f data.json 'items[0:3]'

Single element inspection:

dasel -f data.json 'items[0]'

Step 6 — Type Inspection

Determine the type of any node:

dasel -f data.json 'typeOf(settings)'
dasel -f data.json 'typeOf(items[0].count)'

Return values: "string", "array", "bool", "null", "int", "float"

Step 7 — Value Extraction

Once path is known, extract specific values:

dasel -f config.yaml 'database.connection.host'
dasel -f data.json 'users[0].email'

Exploration Patterns

Breadth-First Exploration

Start at root, enumerate keys at each level before going deeper:

dasel -f file.json 'keys($this)'           # Level 0
dasel -f file.json 'keys(metadata)'         # Level 1
dasel -f file.json 'keys(metadata.labels)'  # Level 2

Search-Based Exploration (Large Files)

When the file is too large for manual traversal, use search() with predicates:

# Find all objects containing a specific key
dasel -f data.json 'search(has("email"))'

# Find all objects with both "id" and "name" keys
dasel -f data.json 'search(has("id") && has("name"))'

# Find nodes where a value matches
dasel -f data.json 'search($this == 42)'

Count Elements

dasel -f data.json 'len(items)'
dasel -f data.json 'len(keys($this))'

Unique Value Discovery

Extract a field from all array elements, then deduplicate in shell:

dasel -f data.json 'items.map(category)' | dasel -i json '$this...' | sort -u

Recursive Descent

Find all values for a key name at any depth:

dasel -f data.json '..name'

Get first element of every nested array:

dasel -f data.json '..[0]'

Format-Specific Recipes

For detailed per-format exploration commands, see Format-Specific Recipes.

References

Stats
Parent Repo Stars30
Parent Repo Forks4
Last CommitMar 18, 2026