Transformation de Données avec Dasel v3
<when_to_use>
Activez cette compétence lorsque :
- Vous modifiez des valeurs dans des fichiers de configuration (YAML, TOML, JSON, XML, HCL, INI)
- Vous convertissez entre formats de données (JSON vers YAML, TOML vers JSON, etc.)
- Vous mettez à jour par lots des éléments de tableau (prix, versions, drapeaux)
- Vous ajoutez, supprimez ou remodelez des structures de données
- Vous fusionnez des objets ou construisez de nouvelles structures à partir de données existantes
</when_to_use>
Règles de Sécurité
NE REDIRIGEZ JAMAIS la sortie vers le même fichier d'entrée. Cela tronque le fichier avant que dasel ne le lise, entraînant une perte de données :
# MAUVAIS — détruit l'entrée
cat config.yaml | dasel -i yaml --root 'port = 9090' > config.yaml
# CORRECT — écrire dans un fichier temporaire, puis renommer
cat config.yaml | dasel -i yaml --root 'port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
Vérifiez toujours avant d'écraser. Prévisualisez d'abord le résultat de la transformation, puis redirigez :
# Prévisualisation
cat config.yaml | dasel -i yaml --root 'server.port = 9090'
# Application
cat config.yaml | dasel -i yaml --root 'server.port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
Syntaxe de Modification de Base
Dans dasel v3, les sous-commandes put et delete n'existent pas. Toutes les modifications utilisent des expressions d'affectation avec --root pour produire le document complet.
Définir une Valeur
# Produit le document complet avec un champ modifié
cat config.yaml | dasel -i yaml --root 'server.port = 9090'
# Assignations numériques, booléennes et de chaînes
echo '{"count": 1}' | dasel -i json --root 'count = 42'
echo '{"enabled": false}' | dasel -i json --root 'enabled = true'
echo '{"name": "old"}' | dasel -i json --root 'name = "new"'
Définir des Valeurs Imbriquées
cat config.yaml | dasel -i yaml --root 'database.connection.host = "db.example.com"'
cat config.yaml | dasel -i yaml --root 'database.connection.port = 5432'
Modification Sur Place (Motif Sûr)
# Mise à jour d'un seul champ
cat config.yaml | dasel -i yaml --root 'server.port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
# Plusieurs champs — chaîner avec des points-virgules
cat config.yaml | dasel -i yaml --root 'server.port = 9090; server.host = "0.0.0.0"' > config_tmp.yaml && mv config_tmp.yaml config.yaml
Conversion de Format
Utilisez un tube pip avec dasel et différents drapeaux de format d'entrée/sortie :
# JSON vers YAML
cat data.json | dasel -i json -o yaml > data.yaml
# YAML vers TOML
cat config.yaml | dasel -i yaml -o toml > config.toml
# JSON vers XML
cat data.json | dasel -i json -o xml > data.xml
# TOML vers JSON
cat config.toml | dasel -i toml -o json > config.json
# CSV vers JSON
cat data.csv | dasel -i csv -o json > data.json
Opérations sur les Tableaux
Ajouter à un Tableau
# Ajouter un élément à la fin du tableau
echo '[1,2,3]' | dasel -i json --root '[$this..., 4]'
# Sortie : [1, 2, 3, 4]
# Ajouter un objet au tableau
cat data.json | dasel -i json --root 'items = [$root.items..., {"name": "new", "value": 42}]'
Mise à Jour par Lots avec each
# Multiplier tous les prix par 1,1 (augmentation de 10%)
cat data.json | dasel -i json --root 'items.each(price = price * 1.1)'
# Définir un drapeau sur tous les éléments
cat data.json | dasel -i json --root 'users.each(active = true)'
# Incrémenter toutes les valeurs
echo '[1,2,3]' | dasel -i json --root 'each($this = $this + 1)'
Filtrer puis Transformer
# Obtenir uniquement les utilisateurs actifs, puis extraire les noms
cat data.json | dasel -i json 'users.filter(active == true).map(name)'
Opérations sur les Objets
Fusion via Décomposition
# Ajouter une nouvelle clé à un objet existant
cat base.json | dasel -i json --root '{ $root..., "newKey": "value" }'
# Fusionner deux objets
cat base.json | dasel -i json --root '{ $root..., "extra": true, "version": 2 }'
Suppression de Champ par Reconstruction
Puisque v3 n'a pas de commande delete, supprimez des champs en construisant un nouvel objet avec uniquement les clés souhaitées :
# Conserver uniquement "name" et "email", supprimer tout le reste
echo '{"name":"a","email":"b","password":"c"}' | dasel -i json --root '{ name, email }'
Renommage de Champ par Reconstruction
echo '{"old_name": "value"}' | dasel -i json --root '{ "new_name": old_name }'
Transformations Multi-Étapes
Utilisez l'assignation de variables et les points-virgules pour les opérations complexes :
# Stocker le résultat intermédiaire dans une variable, puis transformer
cat data.json | dasel -i json '$active = users.filter(active == true); $active.map(name)'
# Variables multiples
cat data.json | dasel -i json '$a = items.filter(price > 100); $b = $a.map(name); $b'
Transformation Conditionnelle
# Définir une valeur selon une condition
cat data.json | dasel -i json --root 'if(count > 5) { status = "many" } else { status = "few" }'
Motifs de Transformation
Pour des motifs de transformation détaillés par cas d'utilisation (mises à jour de configuration, traitement par lots, migration de format, remodelage de données, gestion des erreurs), voir Motifs de Transformation.
Références
- Documentation de Dasel v3 (récupérée le 2026-02-19)
- Opérateur de Décomposition de Dasel (récupérée le 2026-02-19)
- Fonction
each()de Dasel (récupérée le 2026-02-19) - Fonction
filter()de Dasel (récupérée le 2026-02-19) - CHANGELOG de Dasel (récupérée le 2026-02-19)