Converter JSON para CSV: achatar um array de objetos

Um array JSON de objetos se mapeia para uma tabela CSV — uma linha por objeto, colunas a partir da união das chaves. O trabalho real está no quoting e no tratamento dos valores aninhados.

O formato «array de objetos»

CSV é uma tabela plana, então o JSON que converte limpinho é um array de objetos: cada objeto vira uma linha e cada chave vira uma coluna.

Construir o cabeçalho

Use a união das chaves de todos os objetos como cabeçalho, não só as do primeiro, para que registros com chaves a mais ou a menos continuem alinhados. As células faltantes ficam em branco.

Regras de aspas

Qualquer valor que contenha vírgula, aspas duplas ou quebra de linha precisa estar entre aspas duplas, com as aspas internas duplicadas, senão as colunas desalinham.

Valores aninhados

Objetos e arrays não têm forma plana em CSV: escreva-os como texto JSON dentro da célula (reversível) ou achate-os em colunas pontuadas como address.city.

Ordem do cabeçalho e estabilidade

Ordene a união das chaves ou fixe a ordem para as chaves do primeiro registro com os extras anexados ao final. Uma ordem estável de cabeçalho deixa os diffs entre exportações úteis e evita reembaralhar colunas a cada execução.

Formatação de datas e números

Planilhas reinterpretam valores de forma agressiva: IDs numéricos longos perdem precisão, datas ISO são reformatadas, zeros à esquerda somem. Se um valor precisa fazer uma ida e volta exata, coloque-o entre aspas e prefixe com uma apóstrofe ao colar no Excel.

Compatibilidade com Excel e Google Sheets

Use finais de linha CRLF e um BOM (UTF-8 com byte-order mark) para o Excel detectar Unicode. No Google Sheets, o BOM é opcional, mas a vírgula como delimitador e o escapamento por aspas duplas continuam valendo.

Do CSV de volta para JSON

Parseie as linhas com um split sensível a aspas (não dê split ingênuo por vírgula), use a primeira linha como nomes de campos e tente converter números, booleanos e datas ISO por coluna. A ida e volta nesta ferramenta mantém strings como strings, a menos que uma coluna seja totalmente numérica.

Armadilhas comuns

Estes são os problemas que quebram a maioria das exportações CSV.

  • Vírgulas não escapadas dentro de valores de string
  • Quebras de linha em células sem aspas envolvendo
  • Codificações misturadas (UTF-8 vs Latin-1) gerando mojibake
  • Inteiros grandes (IDs) truncados silenciosamente pelas planilhas
  • Booleanos guardados como strings "true"/"false" em vez de TRUE/FALSE