Pular para o conteúdo principal

Data Mapping Avançado

Aprenda técnicas avançadas de mapeamento e transformação de dados para criar workflows mais poderosos e eficientes no n8n.


1 | Expressões Avançadas

Funções Matemáticas

Operações matemáticas complexas:

// Soma com validação
{{ $json.valor1 + $json.valor2 || 0 }}

// Média de valores
{{ ($json.valor1 + $json.valor2 + $json.valor3) / 3 }}

// Porcentagem
{{ ($json.atual / $json.total) * 100 }}

// Arredondamento
{{ Math.round($json.valor * 100) / 100 }}

Manipulação de Strings

Transformações de texto avançadas:

// Capitalizar primeira letra
{{ $json.nome.charAt(0).toUpperCase() + $json.nome.slice(1) }}

// Extrair domínio de email
{{ $json.email.split('@')[1] }}

// Remover caracteres especiais
{{ $json.texto.replace(/[^a-zA-Z0-9]/g, '') }}

// Formatar CPF
{{ $json.cpf.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/, '$1.$2.$3-$4') }}

2 | Lógica Condicional

Operadores Ternários

Condições em uma linha:

// Status baseado em valor
{{ $json.valor > 100 ? 'Alto' : 'Baixo' }}

// Formatação condicional
{{ $json.tipo === 'cliente' ? 'Cliente VIP' : 'Cliente Regular' }}

// Valor padrão
{{ $json.nome || 'Nome não informado' }}

// Múltiplas condições
{{ $json.score > 90 ? 'Excelente' : $json.score > 70 ? 'Bom' : 'Regular' }}

Validações Complexas

Verificações avançadas:

// Validar email
{{ /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test($json.email) ? 'Válido' : 'Inválido' }}

// Validar CPF
{{ $json.cpf.length === 11 && /^\d+$/.test($json.cpf) ? 'Válido' : 'Inválido' }}

// Verificar se é número
{{ typeof $json.valor === 'number' ? $json.valor : 0 }}

// Validar data
{{ new Date($json.data) instanceof Date && !isNaN(new Date($json.data)) ? 'Válida' : 'Inválida' }}

3 | Manipulação de Arrays

Filtros Avançados

Filtrar dados complexos:

// Filtrar por valor
{{ $json.items.filter(item => item.status === 'ativo') }}

// Filtrar por múltiplas condições
{{ $json.produtos.filter(prod => prod.preco > 50 && prod.categoria === 'eletronicos') }}

// Filtrar valores únicos
{{ [...new Set($json.emails)] }}

// Filtrar por data
{{ $json.pedidos.filter(pedido => new Date(pedido.data) > new Date('2024-01-01')) }}

Transformações de Array

Modificar arrays:

// Mapear propriedades
{{ $json.usuarios.map(user => ({ nome: user.name, email: user.email })) }}

// Calcular totais
{{ $json.items.map(item => ({ ...item, total: item.quantidade * item.preco })) }}

// Adicionar timestamps
{{ $json.logs.map(log => ({ ...log, timestamp: new Date().toISOString() })) }}

// Formatar dados
{{ $json.clientes.map(cliente => ({ 
  nome: cliente.nome.toUpperCase(),
  telefone: cliente.telefone.replace(/(\d{2})(\d{5})(\d{4})/, '($1) $2-$3')
})) }}

4 | Funções Customizadas

Funções JavaScript

Criar funções reutilizáveis:

// Função para formatar moeda
{{ (function(valor) {
  return new Intl.NumberFormat('pt-BR', {
    style: 'currency',
    currency: 'BRL'
  }).format(valor);
})($json.valor) }}

// Função para validar CNPJ
{{ (function(cnpj) {
  cnpj = cnpj.replace(/[^\d]/g, '');
  if (cnpj.length !== 14) return false;
  // Lógica de validação do CNPJ
  return true;
})($json.cnpj) }}

// Função para gerar slug
{{ (function(texto) {
  return texto
    .toLowerCase()
    .normalize('NFD')
    .replace(/[\u0300-\u036f]/g, '')
    .replace(/[^a-z0-9]+/g, '-')
    .replace(/^-+|-+$/g, '');
})($json.titulo) }}

Bibliotecas Externas

Usar bibliotecas JavaScript:

// Usar moment.js para datas
{{ moment($json.data).format('DD/MM/YYYY') }}

// Usar lodash para manipulação
{{ _.groupBy($json.items, 'categoria') }}

// Usar validator.js para validações
{{ validator.isEmail($json.email) }}

5 | Mapeamento de Objetos Complexos

Objetos Aninhados

Acessar dados profundos:

// Acesso seguro a propriedades
{{ $json?.cliente?.endereco?.cidade || 'Não informado' }}

// Desestruturação
{{ (function(data) {
  const { nome, email, telefone } = data.cliente;
  return { nome, email, telefone };
})($json) }}

// Mapeamento de objetos aninhados
{{ $json.pedidos.map(pedido => ({
  id: pedido.id,
  cliente: pedido.cliente.nome,
  endereco: `${pedido.cliente.endereco.rua}, ${pedido.cliente.endereco.numero}`,
  itens: pedido.itens.length
})) }}

Transformações de Estrutura

Reorganizar dados:

// Converter array para objeto
{{ (function(items) {
  return items.reduce((acc, item) => {
    acc[item.id] = item;
    return acc;
  }, {});
})($json.produtos) }}

// Agrupar por categoria
{{ (function(items) {
  return items.reduce((acc, item) => {
    if (!acc[item.categoria]) acc[item.categoria] = [];
    acc[item.categoria].push(item);
    return acc;
  }, {});
})($json.produtos) }}

// Flatten de arrays aninhados
{{ (function(data) {
  return data.reduce((acc, item) => {
    return acc.concat(item.subitems || []);
  }, []);
})($json.categorias) }}

6 | Manipulação de Datas

Formatação de Datas

Formatos brasileiros:

// Data brasileira
{{ new Date($json.data).toLocaleDateString('pt-BR') }}

// Data e hora
{{ new Date($json.data).toLocaleString('pt-BR') }}

// Data relativa
{{ (function(data) {
  const agora = new Date();
  const data = new Date(data);
  const diff = Math.floor((agora - data) / (1000 * 60 * 60 * 24));
  return diff === 0 ? 'Hoje' : diff === 1 ? 'Ontem' : `${diff} dias atrás`;
})($json.data) }}

// Dia da semana
{{ new Date($json.data).toLocaleDateString('pt-BR', { weekday: 'long' }) }}

Cálculos de Tempo

Operações temporais:

// Diferença em dias
{{ Math.floor((new Date($json.dataFim) - new Date($json.dataInicio)) / (1000 * 60 * 60 * 24)) }}

// Adicionar dias
{{ new Date($json.data).setDate(new Date($json.data).getDate() + 7) }}

// Verificar se é fim de semana
{{ (function(data) {
  const dia = new Date(data).getDay();
  return dia === 0 || dia === 6 ? 'Fim de semana' : 'Dia útil';
})($json.data) }}

// Calcular idade
{{ (function(dataNascimento) {
  const hoje = new Date();
  const nascimento = new Date(dataNascimento);
  return hoje.getFullYear() - nascimento.getFullYear();
})($json.dataNascimento) }}

7 | Validação e Sanitização

Validações de Dados

Verificar integridade:

// Validar campos obrigatórios
{{ (function(data) {
  const campos = ['nome', 'email', 'telefone'];
  return campos.every(campo => data[campo] && data[campo].trim() !== '');
})($json) }}

// Validar formato de telefone
{{ /^\(\d{2}\) \d{5}-\d{4}$/.test($json.telefone) }}

// Validar CPF
{{ (function(cpf) {
  cpf = cpf.replace(/[^\d]/g, '');
  if (cpf.length !== 11) return false;
  // Algoritmo de validação do CPF
  return true;
})($json.cpf) }}

// Validar email corporativo
{{ /@empresa\.com\.br$/.test($json.email) }}

Sanitização de Dados

Limpar dados:

// Remover espaços extras
{{ $json.texto.trim() }}

// Normalizar telefone
{{ $json.telefone.replace(/\D/g, '').replace(/(\d{2})(\d{5})(\d{4})/, '($1) $2-$3') }}

// Capitalizar nome
{{ (function(nome) {
  return nome.split(' ').map(palavra => 
    palavra.charAt(0).toUpperCase() + palavra.slice(1).toLowerCase()
  ).join(' ');
})($json.nome) }}

// Remover caracteres especiais
{{ $json.texto.replace(/[^\w\s]/g, '') }}

8 | Próximos passos

  1. Transformações de Dados - Técnicas de transformação
  2. Agregações e Estatísticas - Cálculos complexos
  3. Integração com APIs - Mapeamento de respostas de API

Agora você domina técnicas avançadas de data mapping. Use essas habilidades para criar workflows mais inteligentes e eficientes!


Dica Pro

Crie templates de expressões comuns que você pode reutilizar em diferentes workflows. Isso acelera o desenvolvimento.

Importante

Sempre teste expressões complexas com dados reais antes de usar em produção. Valide os resultados esperados.

Recurso Adicional

Use o Node.js Function node para expressões muito complexas que não cabem em um campo de mapeamento.