mygems

Converter um CSV em JSON

Cada linha um objeto, cada cabeçalho uma chave.

  • Array, JSON Lines ou arrays
  • Números e booleanos detectados
  • IDs continuam strings
  • Nada é enviado

1.Abrir o arquivo

CSV ou TSV. Arraste para cá ou escolha um arquivo.

Por que existe

De CSV para JSON parece o caminho fácil, e os conversores comuns o deixam fácil errando os tipos: tudo vira string, ou tudo que parece número vira número, inclusive o CEP com zero à esquerda e o ID de 18 dígitos que o JavaScript não consegue representar com exatidão. Aqui cada coluna é decidida a partir de todos os seus valores, e o que só parece número é deixado em paz.

O que ele faz

  • Gera um array de objetos com as chaves da linha de cabeçalho, JSON Lines com um objeto por linha, ou um array de arrays com o cabeçalho primeiro.
  • Detecta colunas inteiramente numéricas ou de verdadeiro/falso e as grava sem aspas.
  • Mantém como string as colunas com zeros à esquerda ou mais de 15 dígitos, porque um número JSON as alteraria.
  • Transforma células vazias em null em vez de string vazia, ou mantém tudo como string se você preferir.
  • Indenta para leitura, ou gera o menor arquivo possível.

Qual formato escolher

Um array de objetos é o que a maioria das APIs e do código JavaScript espera. JSON Lines serve para arquivos grandes e ferramentas de dados que processam um registro por vez, como BigQuery, Elasticsearch e jq. Um array de arrays é o mais compacto e deixa a ordem das colunas explícita.

Perguntas

Por que minha coluna de ID continua string?
Porque transformá-la em número a alteraria. Qualquer parser JSON descarta o zero à esquerda, e inteiros com mais de 15 ou 16 dígitos perdem precisão no JavaScript. Se todos os valores de uma coluna são números simples sem nenhum dos dois problemas, ela é gravada como número.
O que acontece com células vazias?
Viram null quando a detecção de tipos está ligada, já que um CSV não tem como distinguir uma string vazia de um valor ausente. Com a detecção desligada, todo valor, inclusive os vazios, é string.
Ele lida com JSON aninhado?
O CSV é plano, então o JSON gerado também é: um nível de chaves por registro. O caminho inverso, de JSON aninhado para CSV, é o que a ferramenta de JSON para CSV faz.