Referencia de Sintaxis de dasel v3
Binario CLI único para consultar, modificar y convertir datos estructurados. Reemplaza jq + yq + xmllint con una sintaxis de consulta unificada en todos los formatos.
Versión estable al momento de la escritura (fecha: 2026-02-23): v3.2.3
Formatos Soportados
json, yaml, toml, xml, csv, hcl, ini
Uso Básico
# Consultar desde stdin (formato requerido)
echo '{"foo": "bar"}' | dasel -i json 'foo'
# Consultar desde archivo vía stdin
cat config.yaml | dasel -i yaml 'database.host'
# Modificar y mostrar documento completo
echo '{"port": 3000}' | dasel -i json --root 'server.port = 8080'
# Convertir formatos
cat data.json | dasel -i json -o yaml
Manejo de Formatos
dasel v3 NO detecta automáticamente el formato desde la extensión del archivo. No existe la bandera -f/--file. La entrada siempre se lee desde stdin. El formato debe especificarse explícitamente con -i y/o -o. Si solo se proporciona uno, el otro toma el mismo valor. Si no se proporciona ninguno, ambos toman por defecto json (configurable mediante ~/dasel.yaml con la clave default_format).
Fuente: internal/cli/query.go:10-11, internal/cli/run.go:37-43, internal/cli/config.go:19-21
Banderas Principales
-i, --in <formato> Analizador de entrada (json, yaml, toml, xml, csv, hcl, ini)
-o, --out <formato> Analizador de salida (toma por defecto el formato de entrada)
--root Mostrar documento completo después de la modificación
--var <nombre>=<valor> Pasar variables a la consulta (repetible)
--compact Salida compacta (sin formato bonito)
--rw-flag <nombre>=<valor> Bandera de lectura/escritura (ej. --rw-flag csv-delimiter=;)
--read-flag <nombre>=<val> Bandera de lectura (ej. --read-flag xml-mode=structured)
--write-flag <nombre>=<val> Bandera de escritura (ej. --write-flag csv-delimiter=;)
-c, --config <ruta> Ruta del archivo de configuración (por defecto: ~/dasel.yaml)
Referencia Rápida de Selectores
| Selector | Sintaxis | Ejemplo |
|---|---|---|
| Notación de puntos | foo.bar.baz | `cat f.json |
| Índice de array | [0], [2] | `cat f.json |
| Rebanada de array | [0:3] | `cat f.json |
| Descenso recursivo | .., ..name | `cat f.json |
| Todos los valores recursivos | ..* | `cat f.json |
| Construcción de objetos | { clave1, clave2 } | `cat f.json |
| Spread | obj... | `cat f.json |
Referencia Rápida de Funciones
19 funciones integradas en DefaultFuncCollection (fuente: execution/func.go:12-33) más la expresión compleja sortBy.
| Función | Propósito | Ejemplo |
|---|---|---|
filter(pred) | Filtrar arrays | users.filter(active == true) |
map(expr) | Transformar arrays | users.map(name) |
each(expr) | Modificar cada elemento | each($this = $this * 2) |
search(pred) | Búsqueda recursiva | search(has("id")) |
sortBy(expr) | Ordenar array | sortBy($this, desc) |
has(clave) | Verificar si existe clave | has("name") |
get(clave) | Obtener valor en clave/índice | get("name") |
contains(val) | Verificar si la rebanada contiene el valor | contains(42) |
len(expr) | Longitud | len($this) |
join(sep) | Unir a cadena | join(",") |
sum(expr) | Sumar array numérico | sum($this) |
add(args...) | Sumar números | add(1, 2, 3) |
max(args...) | Valor máximo | max(1, 5, 3) |
min(args...) | Valor mínimo | min(1, 5, 3) |
merge(args...) | Fusionar mapas | merge(defaults, overrides) |
keys(expr) | Obtener claves del mapa | keys($this) |
reverse(expr) | Invertir array | reverse($this) |
typeOf(expr) | Obtener cadena de tipo | typeOf($this) |
toString(expr) | Convertir a cadena | toString($this) |
toInt(expr) | Convertir a entero | toInt($this) |
toFloat(expr) | Convertir a flotante | toFloat($this) |
base64e(cad) | Codificar en Base64 | base64e("hola") |
base64d(cad) | Decodificar Base64 | base64d("aGVsbG8=") |
parse(fmt, datos) | Analizar datos en tiempo de ejecución | parse("json", rawStr) |
readFile(ruta) | Leer contenido de archivo | readFile("config.json") |
ignore() | Excluir de la rama | ignore() |
Sintaxis de Modificación
v3 eliminó los subcomandos put y delete. Usa asignación con --root:
# Establecer un valor
echo '{"count": 1}' | dasel -i json --root 'count = 42'
# Asignación booleana
echo '{"enabled": false}' | dasel -i json --root 'enabled = true'
# Añadir a array
echo '[1,2,3]' | dasel -i json --root '[$this..., 4]'
# Eliminar clave (reconstruir sin ella)
echo '{"keep": "yes", "drop": "no"}' | dasel -i json --root '{ keep }'
Conversión de Formatos
# JSON a YAML
cat data.json | dasel -i json -o yaml
# YAML a TOML
cat config.yaml | dasel -i yaml -o toml
# TOML a JSON
cat config.toml | dasel -i toml -o json
Variables Especiales
$root-- referencia al documento raíz$this-- referencia al nodo actual (dentro deeach,map,filter,search)
Asignación de Variables
# Múltiples sentencias con punto y coma
cat data.json | dasel -i json '$active = users.filter(active == true); $active.map(name)'
Condicionales
echo '{"count": 7}' | dasel -i json 'if(count > 5) { "many" } else { "few" }'
Cambios Rupturistas en v3 respecto a v2
- Subcomandos
putydeleteeliminados; usar asignación inline con--root - Bandera
-f/--fileeliminada; la entrada siempre viene de stdin mediante pipe - Sintaxis de consultas/selectores completamente renovada; la sintaxis v2 NO es compatible con v3
- El framework CLI cambió de Cobra a Kong
- La ruta del módulo Go cambió a
github.com/tomwright/dasel/v3
Referencias Detalladas
- Selectores y Sintaxis -- notación de puntos, arrays, descenso recursivo, construcción de objetos, variables, condicionales, operadores de comparación
- Referencia de Funciones -- firmas completas de funciones, descripciones y ejemplos
- Patrones Específicos de Formato -- patrones JSON, YAML, TOML, XML, CSV, HCL, INI y advertencias de conversión
Fuentes
- README de dasel: https://raw.githubusercontent.com/TomWright/dasel/master/README.md (obtenido 2026-02-19)
- Documentación de dasel: https://daseldocs.tomwright.me (obtenido 2026-02-19)
- Sintaxis de consultas: https://daseldocs.tomwright.me/syntax/query-syntax.md (obtenido 2026-02-19)
- Índice de funciones: https://daseldocs.tomwright.me/functions (obtenido 2026-02-19)
- CHANGELOG: https://raw.githubusercontent.com/TomWright/dasel/master/CHANGELOG.md (obtenido 2026-02-19)
- Lanzamientos: https://github.com/TomWright/dasel/releases (obtenido 2026-02-19)
- Análisis del código fuente:
execution/func.go,internal/cli/query.go,internal/cli/run.go,internal/cli/config.go,execution/execute_binary.go,execution/execute_unary.go(analizado 2026-02-19) - Verificación de hechos: FACT_CHECK_REPORT.md (2026-02-23)