Transformação de Dados com Dasel v3
<when_to_use>
Ative esta skill quando:
- Modificando valores em arquivos de configuração (YAML, TOML, JSON, XML, HCL, INI)
- Convertendo entre formatos de dados (JSON para YAML, TOML para JSON, etc.)
- Atualizando elementos de array em lote (preços, versões, flags)
- Adicionando, removendo ou remodelando estruturas de dados
- Mesclando objetos ou construindo novas estruturas a partir de dados existentes
</when_to_use>
Regras de Segurança
NUNCA redirecione a saída para o mesmo arquivo de entrada. Isso trunca o arquivo antes do dasel lê-lo, resultando em perda de dados:
# ERRADO — destrói a entrada
cat config.yaml | dasel -i yaml --root 'port = 9090' > config.yaml
# CORRETO — escreva para um temporário, depois renomeie
cat config.yaml | dasel -i yaml --root 'port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
Sempre verifique antes de sobrescrever. Visualize a saída da transformação primeiro, depois redirecione:
# Visualizar
cat config.yaml | dasel -i yaml --root 'server.port = 9090'
# Aplicar
cat config.yaml | dasel -i yaml --root 'server.port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
Sintaxe de Modificação Principal
No dasel v3, os subcomandos put e delete não existem. Todas as modificações usam expressões de atribuição com --root para gerar o documento completo.
Definir um Valor
# Gera documento completo com um campo alterado
cat config.yaml | dasel -i yaml --root 'server.port = 9090'
# Atribuições numéricas, booleanas e de string
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"'
Definir Valores Aninhados
cat config.yaml | dasel -i yaml --root 'database.connection.host = "db.example.com"'
cat config.yaml | dasel -i yaml --root 'database.connection.port = 5432'
Modificação In-Place (Padrão Seguro)
# Atualização de campo único
cat config.yaml | dasel -i yaml --root 'server.port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
# Múltiplos campos — encadeie com ponto e vírgula
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
Conversão de Formato
Use pipe com dasel usando flags diferentes de formato de entrada/saída:
# JSON para YAML
cat data.json | dasel -i json -o yaml > data.yaml
# YAML para TOML
cat config.yaml | dasel -i yaml -o toml > config.toml
# JSON para XML
cat data.json | dasel -i json -o xml > data.xml
# TOML para JSON
cat config.toml | dasel -i toml -o json > config.json
# CSV para JSON
cat data.csv | dasel -i csv -o json > data.json
Operações com Array
Adicionar ao Array
# Adiciona elemento ao final do array
echo '[1,2,3]' | dasel -i json --root '[$this..., 4]'
# Saída: [1, 2, 3, 4]
# Adiciona objeto ao array
cat data.json | dasel -i json --root 'items = [$root.items..., {"name": "new", "value": 42}]'
Atualização em Lote com each
# Multiplica todos os preços por 1.1 (aumento de 10%)
cat data.json | dasel -i json --root 'items.each(price = price * 1.1)'
# Define uma flag em todos os elementos
cat data.json | dasel -i json --root 'users.each(active = true)'
# Incrementa todos os valores
echo '[1,2,3]' | dasel -i json --root 'each($this = $this + 1)'
Filtrar Depois Transformar
# Obtém apenas usuários ativos, depois extrai nomes
cat data.json | dasel -i json 'users.filter(active == true).map(name)'
Operações com Objetos
Mesclar via Spread
# Adiciona nova chave a objeto existente
cat base.json | dasel -i json --root '{ $root..., "newKey": "value" }'
# Mescla dois objetos
cat base.json | dasel -i json --root '{ $root..., "extra": true, "version": 2 }'
Exclusão de Campo via Reconstrução
Como o v3 não tem comando delete, remova campos construindo um novo objeto com apenas as chaves desejadas:
# Mantém apenas "name" e "email", descarta todo o resto
echo '{"name":"a","email":"b","password":"c"}' | dasel -i json --root '{ name, email }'
Renomear Campo via Reconstrução
echo '{"old_name": "value"}' | dasel -i json --root '{ "new_name": old_name }'
Transformações de Múltiplos Passos
Use atribuição de variáveis e ponto e vírgula para operações complexas:
# Armazena resultado intermediário em variável, depois transforma
cat data.json | dasel -i json '$active = users.filter(active == true); $active.map(name)'
# Múltiplas variáveis
cat data.json | dasel -i json '$a = items.filter(price > 100); $b = $a.map(name); $b'
Transformação Condicional
# Define valor baseado em condição
cat data.json | dasel -i json --root 'if(count > 5) { status = "many" } else { status = "few" }'
Padrões de Transformação
Para padrões de transformação detalhados por caso de uso (atualizações de configuração, processamento em lote, migração de formato, remodelagem de dados, tratamento de erros), consulte Padrões de Transformação.
Referências
- Documentação do Dasel v3 (obtida em 2026-02-19)
- Operador Spread do Dasel (obtida em 2026-02-19)
- Função each() do Dasel (obtida em 2026-02-19)
- Função filter() do Dasel (obtida em 2026-02-19)
- CHANGELOG do Dasel (obtida em 2026-02-19)