Objetos e arrays aninhados são ótimos para representar estrutura, mas incômodos onde se precisa de uma lista plana de pares chave-valor — planilhas, linhas de log ou um arquivo de tradução. O achatamento (flatten) resolve exatamente esse descompasso.
Como funciona
Cada campo aninhado vira uma linha, onde a chave é o caminho completo até o valor (com pontos ou índices entre colchetes) e o valor é o próprio valor. {"usuario": {"endereco": {"cidade": "Lisboa"}}} vira o par usuario.endereco.cidade → "Lisboa". Elementos de array recebem um índice no caminho, como items[0].nome.
Onde isso aparece: arquivos de tradução (i18n)
Chaves planas com notação de pontos são o formato padrão em arquivos de localização de bibliotecas como i18next e vue-i18n — settings.profile.title em vez de uma árvore JSON aninhada. Plataformas de tradução e fluxos baseados em planilhas quase sempre esperam esse formato plano, então achatar um arquivo de idioma aninhado costuma ser o primeiro passo antes de enviar para tradução.
Para que isso serve na prática
- Importar dados aninhados de uma API para uma planilha ou uma tabela plana de banco de dados.
- Facilitar a comparação linha a linha entre dois objetos complexos.
- Encontrar rapidamente um valor num JSON muito aninhado, vendo o caminho completo de uma vez.
A operação inversa: unflatten
Reconstruir a estrutura aninhada a partir da lista plana significa separar cada chave em seus segmentos de caminho (por pontos e índices entre colchetes) e montar objetos e arrays aninhados progressivamente. A ambiguidade aparece quando um caminho pode significar duas coisas: se os dados têm ao mesmo tempo uma chave literal "a.b" e um caminho aninhado a.b, o unflatten não consegue adivinhar qual era a intenção e sinaliza um conflito em vez de sobrescrever silenciosamente.