Référence de syntaxe dasel v3
Binaire unique en ligne de commande pour interroger, modifier et convertir des données structurées. Remplace jq + yq + xmllint avec une syntaxe de requête unifiée pour tous les formats.
Version stable au moment de la rédaction (date: 2026-02-23) : v3.2.3
Formats pris en charge
json, yaml, toml, xml, csv, hcl, ini
Utilisation de base
# Interroger depuis l'entrée standard (format requis)
echo '{"foo": "bar"}' | dasel -i json 'foo'
# Interroger un fichier via l'entrée standard
cat config.yaml | dasel -i yaml 'database.host'
# Modifier et afficher le document complet
echo '{"port": 3000}' | dasel -i json --root 'server.port = 8080'
# Convertir des formats
cat data.json | dasel -i json -o yaml
Gestion des formats
dasel v3 ne détecte PAS automatiquement le format à partir de l'extension de fichier. Il n'y a pas de flag -f/--file. L'entrée est toujours lue depuis l'entrée standard. Le format doit être spécifié explicitement avec -i et/ou -o. Si un seul est donné, l'autre prend sa valeur par défaut. Si aucun n'est donné, les deux utilisent json par défaut (configurable via ~/dasel.yaml avec la clé default_format).
Source : internal/cli/query.go:10-11, internal/cli/run.go:37-43, internal/cli/config.go:19-21
Flags principaux
-i, --in <format> Analyseur d'entrée (json, yaml, toml, xml, csv, hcl, ini)
-o, --out <format> Analyseur de sortie (par défaut : format d'entrée)
--root Afficher le document complet après modification
--var <nom>=<valeur> Passer des variables dans la requête (répétable)
--compact Sortie compacte (sans jolie impression)
--rw-flag <nom>=<valeur> Flag lecture/écriture (ex. --rw-flag csv-delimiter=;)
--read-flag <nom>=<val> Flag de lecture (ex. --read-flag xml-mode=structured)
--write-flag <nom>=<val> Flag d'écriture (ex. --write-flag csv-delimiter=;)
-c, --config <chemin> Chemin du fichier de configuration (par défaut : ~/dasel.yaml)
Référence rapide des sélecteurs de base
| Sélecteur | Syntaxe | Exemple |
|---|---|---|
| Notation par points | foo.bar.baz | cat f.json | dasel -i json 'foo.bar' |
| Index de tableau | [0], [2] | cat f.json | dasel -i json 'items[0]' |
| Tranche de tableau | [0:3] | cat f.json | dasel -i json 'items[0:2]' |
| Descente récursive | .., ..nom | cat f.json | dasel -i json '..nom' |
| Toutes les valeurs réc. | ..* | cat f.json | dasel -i json '..*' |
| Construction d'objet | { clé1, clé2 } | cat f.json | dasel -i json '{ nom, age }' |
| Décomposition (spread) | obj... | cat f.json | dasel -i json '{ defauts..., ecrasements... }' |
Référence rapide des fonctions principales
19 fonctions intégrées dans DefaultFuncCollection (source : execution/func.go:12-33) plus l'expression complexe sortBy.
| Fonction | But | Exemple |
|---|---|---|
filter(prédicat) | Filtrer les tableaux | users.filter(actif == true) |
map(expr) | Transformer les tableaux | users.map(nom) |
each(expr) | Modifier chaque élément | each($ceci = $ceci * 2) |
search(prédicat) | Recherche récursive | search(a("id")) |
sortBy(expr) | Trier un tableau | sortBy($ceci, desc) |
has(clé) | Vérifier si une clé existe | has("nom") |
get(clé) | Obtenir la valeur à clé/index | get("nom") |
contains(valeur) | Vérifier si la tranche contient | contains(42) |
len(expr) | Longueur | len($ceci) |
join(séparateur) | Joindre en chaîne | join(",") |
sum(expr) | Somme d'un tableau numérique | sum($ceci) |
add(args...) | Ajouter des nombres | add(1, 2, 3) |
max(args...) | Valeur maximale | max(1, 5, 3) |
min(args...) | Valeur minimale | min(1, 5, 3) |
merge(args...) | Fusionner des cartes | merge(defauts, ecrasements) |
keys(expr) | Obtenir les clés d'une carte | keys($ceci) |
reverse(expr) | Inverser un tableau | reverse($ceci) |
typeOf(expr) | Obtenir le type sous forme de chaîne | typeOf($ceci) |
toString(expr) | Convertir en chaîne | toString($ceci) |
toInt(expr) | Convertir en entier | toInt($ceci) |
toFloat(expr) | Convertir en flottant | toFloat($ceci) |
base64e(chaîne) | Encodage Base64 | base64e("bonjour") |
base64d(chaîne) | Décodage Base64 | base64d("aGVsbG8=") |
parse(format, donnée) | Analyser des données à l'exécution | parse("json", rawStr) |
readFile(chemin) | Lire le contenu d'un fichier | readFile("config.json") |
ignore() | Exclure d'une branche | ignore() |
Syntaxe de modification
v3 a supprimé les sous-commandes put et delete. Utilisez l'affectation avec --root :
# Définir une valeur
echo '{"count": 1}' | dasel -i json --root 'count = 42'
# Affectation booléenne
echo '{"enabled": false}' | dasel -i json --root 'enabled = true'
# Ajouter à un tableau
echo '[1,2,3]' | dasel -i json --root '[$ceci..., 4]'
# Supprimer une clé (reconstruire sans elle)
echo '{"keep": "yes", "drop": "no"}' | dasel -i json --root '{ keep }'
Conversion de format
# JSON vers YAML
cat data.json | dasel -i json -o yaml
# YAML vers TOML
cat config.yaml | dasel -i yaml -o toml
# TOML vers JSON
cat config.toml | dasel -i toml -o json
Variables spéciales
$root-- référence au document racine$this-- référence au nœud courant (danseach,map,filter,search)
Affectation de variables
# Multi-instructions avec des points-virgules
cat data.json | dasel -i json '$active = users.filter(active == true); $active.map(name)'
Conditionnelles
echo '{"count": 7}' | dasel -i json 'if(count > 5) { "many" } else { "few" }'
Changements cassants de v3 par rapport à v2
- Les sous-commandes
putetdeletesont supprimées ; utilisez l'affectation en ligne avec--root - Le flag
-f/--fileest supprimé ; l'entrée provient toujours de l'entrée standard via un pipe - La syntaxe des requêtes/sélecteurs a été complètement revue ; la syntaxe v2 n'est PAS compatible avec v3
- Le framework CLI est passé de Cobra à Kong
- Le chemin du module Go a changé pour
github.com/tomwright/dasel/v3
Références détaillées
- Sélecteurs et syntaxe -- notation par points, tableaux, descente récursive, construction d'objets, variables, conditionnelles, opérateurs de comparaison
- Référence des fonctions -- signatures complètes, descriptions et exemples
- Motifs spécifiques aux formats -- motifs JSON, YAML, TOML, XML, CSV, HCL, INI et pièges de conversion
Sources
- README de dasel : https://raw.githubusercontent.com/TomWright/dasel/master/README.md (récupéré le 2026-02-19)
- Documentation de dasel : https://daseldocs.tomwright.me (récupéré le 2026-02-19)
- Syntaxe de requête : https://daseldocs.tomwright.me/syntax/query-syntax.md (récupéré le 2026-02-19)
- Index des fonctions : https://daseldocs.tomwright.me/functions (récupéré le 2026-02-19)
- CHANGELOG : https://raw.githubusercontent.com/TomWright/dasel/master/CHANGELOG.md (récupéré le 2026-02-19)
- Versions : https://github.com/TomWright/dasel/releases (récupéré le 2026-02-19)
- Analyse du code source :
execution/func.go,internal/cli/query.go,internal/cli/run.go,internal/cli/config.go,execution/execute_binary.go,execution/execute_unary.go(analysé le 2026-02-19) - Vérification des faits : FACT_CHECK_REPORT.md (2026-02-23)