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 de String

Manipulação de texto em uma linha:

// 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') }}

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

2. Lógica Condicional

Operadores ternários e 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 e 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 para 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 para 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 para 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 para 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 para 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 para 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 em 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 e 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 para 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 para 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. Data Mapping Avançado - Técnicas de mapeamento
  2. Integração com APIs - 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.