Datentransformation mit Dasel v3
<when_to_use>
Aktivieren Sie diesen Skill, wenn:
- Werte in Konfigurationsdateien (YAML, TOML, JSON, XML, HCL, INI) geändert werden sollen
- Zwischen Datenformaten konvertiert werden soll (JSON zu YAML, TOML zu JSON, etc.)
- Array-Elemente (Preise, Versionen, Flags) batchweise aktualisiert werden sollen
- Datenstrukturen erweitert, entfernt oder umgeformt werden sollen
- Objekte zusammengeführt oder neue Strukturen aus bestehenden Daten erstellt werden sollen
</when_use>
Sicherheitsregeln
Leiten Sie die Ausgabe NIEMALS in dieselbe Eingabedatei um. Dies kürzt die Datei vor dem Lesen durch dasel, was zu Datenverlust führt:
# FALSCH – zerstört die Eingabe
cat config.yaml | dasel -i yaml --root 'port = 9090' > config.yaml
# RICHTIG – in temporäre Datei schreiben, dann umbenennen
cat config.yaml | dasel -i yaml --root 'port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
Überprüfen Sie immer vor dem Überschreiben. Zeigen Sie das Transformationsergebnis zuerst an, dann leiten Sie um:
# Vorschau
cat config.yaml | dasel -i yaml --root 'server.port = 9090'
# Anwenden
cat config.yaml | dasel -i yaml --root 'server.port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
Grundlegende Änderungssyntax
In Dasel v3 gibt es keine Unterbefehle put und delete. Alle Änderungen verwenden Zuweisungsausdrücke mit --root, um das vollständige Dokument auszugeben.
Einen Wert setzen
# Vollständiges Dokument mit einem geänderten Feld ausgeben
cat config.yaml | dasel -i yaml --root 'server.port = 9090'
# Numerische, boolesche und String-Zuweisungen
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"'
Verschachtelte Werte setzen
cat config.yaml | dasel -i yaml --root 'database.connection.host = "db.example.com"'
cat config.yaml | dasel -i yaml --root 'database.connection.port = 5432'
In-Place-Änderung (sicheres Muster)
# Einzelnes Feld aktualisieren
cat config.yaml | dasel -i yaml --root 'server.port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
# Mehrere Felder – mit Semikolons verketten
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
Formatkonvertierung
Daten durch dasel mit unterschiedlichen Eingabe-/Ausgabeformat-Flags leiten:
# JSON zu YAML
cat data.json | dasel -i json -o yaml > data.yaml
# YAML zu TOML
cat config.yaml | dasel -i yaml -o toml > config.toml
# JSON zu XML
cat data.json | dasel -i json -o xml > data.xml
# TOML zu JSON
cat config.toml | dasel -i toml -o json > config.json
# CSV zu JSON
cat data.csv | dasel -i csv -o json > data.json
Array-Operationen
An ein Array anhängen
# Element am Ende des Arrays hinzufügen
echo '[1,2,3]' | dasel -i json --root '[$this..., 4]'
# Ausgabe: [1, 2, 3, 4]
# Objekt an Array anhängen
cat data.json | dasel -i json --root 'items = [$root.items..., {"name": "new", "value": 42}]'
Batch-Update mit each
# Alle Preise mit 1,1 multiplizieren (10% Erhöhung)
cat data.json | dasel -i json --root 'items.each(price = price * 1.1)'
# Ein Flag für alle Elemente setzen
cat data.json | dasel -i json --root 'users.each(active = true)'
# Alle Werte inkrementieren
echo '[1,2,3]' | dasel -i json --root 'each($this = $this + 1)'
Filtern, dann transformieren
# Nur aktive Benutzer abrufen, dann Namen extrahieren
cat data.json | dasel -i json 'users.filter(active == true).map(name)'
Objektoperationen
Zusammenführen mittels Spread
# Neuen Schlüssel zu vorhandenem Objekt hinzufügen
cat base.json | dasel -i json --root '{ $root..., "newKey": "value" }'
# Zwei Objekte zusammenführen
cat base.json | dasel -i json --root '{ $root..., "extra": true, "version": 2 }'
Felder entfernen durch Rekonstruktion
Da v3 keinen delete-Befehl hat, entfernen Sie Felder, indem Sie ein neues Objekt mit nur den gewünschten Schlüsseln konstruieren:
# Nur "name" und "email" behalten, alles andere fallen lassen
echo '{"name":"a","email":"b","password":"c"}' | dasel -i json --root '{ name, email }'
Felder umbenennen durch Rekonstruktion
echo '{"old_name": "value"}' | dasel -i json --root '{ "new_name": old_name }'
Mehrschritt-Transformationen
Verwenden Sie Variablenzuweisung und Semikolons für komplexe Operationen:
# Zwischenergebnis in Variable speichern, dann transformieren
cat data.json | dasel -i json '$active = users.filter(active == true); $active.map(name)'
# Mehrere Variablen
cat data.json | dasel -i json '$a = items.filter(price > 100); $b = $a.map(name); $b'
Bedingte Transformation
# Wert basierend auf Bedingung setzen
cat data.json | dasel -i json --root 'if(count > 5) { status = "many" } else { status = "few" }'
Transformationsmuster
Detaillierte anwendungsfallspezifische Transformationsmuster (Konfigurationsupdates, Batchverarbeitung, Formatmigration, Datenumformung, Fehlerbehandlung) finden Sie unter Transformationsmuster.
Referenzen
- Dasel v3 Dokumentation (abgerufen am 2026-02-19)
- Dasel Spread Operator (abgerufen am 2026-02-19)
- Dasel each()-Funktion (abgerufen am 2026-02-19)
- Dasel filter()-Funktion (abgerufen am 2026-02-19)
- Dasel CHANGELOG (abgerufen am 2026-02-19)