CSV, JSON e YAML
Três formatos carregam a maior parte dos dados estruturados do mundo. Converter entre eles é fácil; converter sem corromper algo em silêncio exige um pouco de cuidado.
Publicado em
Para que serve cada um
CSV é uma tabela: linhas e colunas, nada mais. É legível por qualquer programa, minúsculo e não consegue expressar nada aninhado. JSON é uma árvore — objetos dentro de arrays dentro de objetos — e é o que quase toda API web fala. YAML expressa as mesmas estruturas do JSON, mas usando indentação em vez de chaves, o que o torna bem mais agradável para humanos lerem e editarem, e é por isso que os arquivos de configuração migraram para ele.
A armadilha da conversão de tipos
Esta é a que realmente custa dinheiro às pessoas. Um CSV contém apenas texto — não há como marcar um valor como número, data ou texto. Então os conversores adivinham, e os palpites com frequência estão errados:
- Um CEP como
01234vira o número1234, perdendo o zero à esquerda. - Um código de produto como
1-2vira uma data. - Um número de conta longo vira ponto flutuante e perde os últimos dígitos.
NA, que significa América do Norte, vira “não disponível”.
Cada um desses erros é silencioso. É por isso que uma conversão cuidadosa de CSV para JSON deve deixar todos os valores como texto e deixar a decisão com você — que é o que o conversor deste site faz de propósito, mesmo que à primeira vista pareça exagero.
O que não sobrevive à ida para CSV
Aninhamento. Um array JSON de objetos simples vira uma tabela limpa. No instante em que um valor é, ele mesmo, um objeto ou um array, não há coluna onde colocá-lo. As opções são achatar com chaves compostas, serializar a parte aninhada de volta em texto dentro da célula ou descartá-la — e descartar em silêncio é a pior das três. Gravá-la de volta como texto JSON dentro da célula pelo menos mantém os dados recuperáveis.
As arestas cortantes do YAML
O YAML é agradável de ler e incomumente fácil de errar.
- A indentação é a estrutura, e tabulações não são permitidas. Um espaço fora do lugar muda o significado em vez de causar um erro.
- Algumas palavras soltas são booleanos. No YAML mais antigo,
y,n,on,off,yesenosão todos interpretados como verdadeiro ou falso — então uma coluna de países contendoNOpara a Noruega virafalse. Coloque-os entre aspas. - Os comentários somem na conversão para JSON, porque o JSON não tem como representá-los.
A ida e volta não é garantida
Converter JSON para YAML e de volta geralmente devolve o que você tinha no início. Converter CSV para JSON e de volta geralmente não: o estilo de aspas, a ordem das colunas em registros com formatos diferentes e a representação de valores vazios são escolhas, e cada ferramenta escolhe de um jeito. Se a ida e volta precisa ser exata, verifique em vez de presumir.
Para passar de um para outro: converta CSV para JSON, converta JSON para CSV ou converta JSON para YAML — e confira o resultado, pois a ida e volta nem sempre é exata.