CSV e JSON são os dois formatos de dados tabulares mais comuns em software moderno, e mover-se entre eles de maneira confiável é uma das tarefas de engenharia de dados mais frequentes em qualquer projeto. CSV é a língua franca de planilhas, exportações analíticas e sistemas legados; JSON é o padrão para APIs da web, pipelines de dados modernos e bancos de dados de documentos. As seções abaixo explicam os casos extremos sutis que atrapalham os conversores ingênuos, quando escolher cada formato e como interpretar a saída do Data Inspector para detectar problemas de qualidade antes que eles cheguem à produção.
Casos extremos que atrapalham conversores ingênuos
Um analisador CSV ingênuo divide cada linha no caractere delimitador e encerra o dia, mas os arquivos CSV do mundo real contêm vários casos extremos que quebram essa abordagem. Os campos entre aspas são os mais comuns: uma célula como `"Smith, John"` contém uma vírgula que faz parte do valor em vez de um separador de campo, e o analisador deve rastrear o estado das aspas à medida que percorre a linha. Novas linhas incorporadas dentro de campos entre aspas são legais de acordo com RFC 4180, mas frequentemente mal analisadas — uma linha CSV pode abranger várias linhas físicas quando uma célula entre aspas é quebrada. As aspas duplas escapadas dentro dos campos entre aspas são representadas como duas aspas duplas consecutivas (""Ele disse ""olá"""`), que devem ser recolhidas para uma aspa simples na saída. BOMs Unicode (marcas de ordem de byte) aparecem no início dos arquivos salvos pelo Excel no Windows e criam bytes indesejados invisíveis no primeiro nome do campo, a menos que sejam removidos. Sistemas diferentes usam finais de linha diferentes (LF no Unix, CRLF no Windows, ocasionalmente CR simples em arquivos Mac antigos), e o analisador deve lidar com todos os três para evitar linhas finais vazias. Este conversor lida com cada um desses casos corretamente, mas se você estiver escrevendo seu próprio conversor, não crie seu próprio analisador - use uma biblioteca bem testada como Papa Parse em JavaScript, módulo csv em Python ou equivalente.
Quando escolher CSV versus JSON
A escolha do formato depende do consumidor e do formato dos dados, e não da origem. Escolha CSV quando os dados forem fundamentalmente tabulares (linhas de registros homogêneos), quando o consumidor for uma ferramenta de planilha (Excel, Planilhas Google, Numbers), um pipeline ETL legado ou qualquer analista que abrirá o arquivo para observá-lo. CSV não tem sobrecarga estrutural — a menor representação possível de dados tabulares — o que é importante quando os arquivos atingem gigabytes. As desvantagens: CSV não tem sistema de tipos (tudo é uma string), não tem suporte para estruturas aninhadas (os dados hierárquicos devem ser nivelados) e nenhuma maneira formal de representar nulos (geralmente uma string vazia ou uma sentinela como `NULL`). Escolha JSON quando os registros forem heterogêneos (formato diferente por registro), quando os dados tiverem aninhamento natural (pedidos com itens de linha, usuários com endereços) ou quando o consumidor for uma API moderna, um aplicativo JavaScript ou um banco de dados de documentos. JSON preserva tipos e estrutura nativos. As desvantagens são o tamanho (o JSON com chaves repetidas é 2 a 5 vezes maior que o CSV equivalente) e o custo de análise (o JSON requer um analisador completo enquanto o CSV pode ser transmitido). JSONL é preciso para conjuntos de dados muito grandes que são naturalmente hierárquicos. Cada linha pode ser analisada de forma independente, permitindo um streaming verdadeiro sem manter o arquivo inteiro na memória.
Usando o Data Inspector para detectar problemas
A guia Inspetor de dados revela problemas de qualidade de dados que, de outra forma, só apareceriam no downstream quando algo quebrasse. O sinal mais importante é a taxa de preenchimento por coluna – a porcentagem de linhas que possuem um valor não nulo em cada coluna. Uma coluna com 100% de preenchimento é totalmente preenchida; uma coluna com preenchimento de 50% tem metade de suas linhas vazias, o que pode estar correto (campos opcionais) ou pode indicar corrupção de dados upstream. Verifique colunas com menos de 80% de preenchimento antes de enviar os dados para qualquer lugar importante. A inferência de tipo informa se uma coluna é consistentemente numérica, de sequência consistente ou mista. Colunas de tipo misto geralmente são um bug na fonte – normalmente uma coluna numérica com algumas entradas de texto perdidas que causarão erros de tipo em um consumidor downstream de tipo estrito. A contagem de valores exclusivos captura chaves duplicadas: se sua suposta coluna de chave primária tiver menos valores exclusivos do que o total de linhas, os dados de origem terão duplicatas que precisam de desduplicação antes da importação. Os valores de amostra fornecem uma verificação rápida de que os primeiros valores em cada coluna parecem razoáveis - datas analisadas como strings, números com símbolos de moeda ainda anexados ou espaços em branco à direita que farão com que as correspondências de string falhem. Juntos, esses diagnósticos detectam cerca de 90% dos problemas reais de qualidade de dados CSV/JSON antes que eles saiam desta ferramenta.