Converter CSV para JSON

Cole o CSV e receba o JSON no navegador, com o delimitador reconhecido sozinho, com ou sem cabeçalho, prévia em tabela e download local. CPF com zero à frente e número grande continuam intactos.

Revisão técnica: Cesar Gargiulo (segurança da informação)
Valim, o mascote do ValorFinal, representando a categoria Tecnologia

A conversão acontece no seu navegador. A planilha não é enviada para servidor nenhum, nem fica salva aqui.

Sem cabeçalho, cada linha vira uma lista de valores em vez de um objeto com nomes de campo.

196 caracteres · 4 linhas · limite 200.000

O que a conversão precisou preservar

  • Estas colunas continuaram como texto porque virar número perderia dígito (zero à esquerda ou número grande demais): cpf, cep, matricula, mensalidade.

Prévia do que vai para o JSON3 linhas · 6 colunas

nomecpfcepmatriculamensalidadeativo
Ana Souza008456789090131100012345678901234567890249.90true
Bruno Lima12345678909200400207180false
Carla Dias98765432100700400101024315.5true

JSON gerado

[
  {
    "nome": "Ana Souza",
    "cpf": "00845678909",
    "cep": "01311000",
    "matricula": "12345678901234567890",
    "mensalidade": "249.90",
    "ativo": true
  },
  {
    "nome": "Bruno Lima",
    "cpf": 12345678909,
    "cep": 20040020,
    "matricula": 7,
    "mensalidade": 180,
    "ativo": false
  },
  {
    "nome": "Carla Dias",
    "cpf": 98765432100,
    "cep": 70040010,
    "matricula": 1024,
    "mensalidade": 315.5,
    "ativo": true
  }
]

O download é gerado e salvo pelo próprio navegador. O arquivo não passa por servidor nenhum.

Antes e depois, com as duas armadilhas à vista

A planilha abaixo tem um CEP que começa com zero e uma matrícula de 20 dígitos. São exatamente os dois casos em que a conversão descuidada estraga o dado sem avisar.

CSV de entrada

nome;cep;matricula;ativo
Ana Souza;01311000;12345678901234567890;true

JSON gerado aqui

[
  {
    "nome": "Ana Souza",
    "cep": "01311000",
    "matricula": "12345678901234567890",
    "ativo": true
  }
]

Um conversor que trata todo número como número devolveria "cep": 1311000 e "matricula": 12345678901234567000. O primeiro perdeu o zero da frente e o segundo perdeu os três últimos dígitos, porque JavaScript representa inteiros exatos só até 9.007.199.254.740.991. Nos dois casos o arquivo continua parecendo correto, e o erro aparece semanas depois, quando alguém tenta cruzar esses dados com outra base.

Cole o CSV, confirme o delimitador e se a primeira linha é cabeçalho, e o JSON aparece pronto para copiar ou baixar. Com cabeçalho, cada linha vira um objeto com os nomes das colunas como chaves. Tudo roda no seu navegador, e valores como CPF e CEP com zero à frente continuam exatamente como estavam.

Como funciona a conversão de CSV para JSON

A leitura segue o padrão do RFC 4180: o texto é percorrido caractere a caractere, respeitando aspas duplas, de modo que um campo entre aspas pode conter o delimitador, quebra de linha e aspas escapadas. A marca de ordem de byte que o Excel escreve no começo do arquivo é removida, senão a primeira coluna viraria uma chave com um caractere invisível na frente e nenhum acesso por nome funcionaria.

Depois vem a tipagem. O CSV não carrega tipo nenhum, então cada célula é examinada: true, false e null viram os valores correspondentes do JSON, e texto que parece número só vira número quando a conversão é reversível. O teste é literal: converte, escreve o número de volta como texto e compara com o original. Se der diferente, o campo permanece string, e a página lista as colunas em que isso aconteceu, em vez de mudar o dado calada.

Para o caminho inverso e para YAML e XML, use o conversor de dados completo. Para validar ou formatar o JSON gerado, o formatador e validador de JSON, e para comparar duas versões do mesmo arquivo, o comparador de texto.

Método

com cabeçalho: [ { coluna1: valor, coluna2: valor } ]

sem cabeçalho: [ [ valor, valor ] ]

vira número apenas se String(Number(texto)) === texto

Base: RFC 4180 (formato CSV) e RFC 8259 (formato JSON). A conversão é determinística e roda no seu navegador, sem enviar dado nenhum.

Limitações

  • O limite de entrada é de 200 mil caracteres colados na página. Planilha maior que isso é melhor converter por script, porque o navegador precisaria manter o texto e o resultado na memória ao mesmo tempo.
  • A prévia em tabela mostra as 50 primeiras linhas. O JSON gerado e o download trazem o arquivo inteiro.
  • Toda célula de uma coluna é avaliada sozinha, então a mesma coluna pode sair com tipos diferentes em linhas diferentes se o arquivo for inconsistente. O conversor não força um tipo por coluna, e diz quais colunas precisou preservar como texto.
  • Decimal com vírgula (1,50) é lido como texto, e não como número, porque o JSON usa ponto. Converta a coluna na planilha antes se precisar do valor numérico.

Guia completo

Como converter CSV, JSON, YAML e XML sem perder estrutura

Veja quando usar CSV, JSON, YAML e XML, como converter entre os formatos sem perder dados, e os cuidados com delimitadores, cabeçalhos, aspas, arrays e estruturas aninhadas.

Calculadoras relacionadas

ValorFinal VIP: Sem anúncios, até 500 cenários salvos e comparação de cenários lado a lado.

Ferramenta transparente, com o método explicado

Atualizado em . Fontes: RFC 4180 (CSV) / RFC 8259 (JSON).

Processamento local: esta ferramenta roda no seu navegador e nada é enviado a servidores automaticamente.

Como validamos

Referências técnicas

Links externos para o que foi consultado na construção desta página, com a natureza de cada fonte identificada. O conteúdo delas pode mudar sem aviso; em caso de divergência, vale sempre a fonte primária.

Perguntas frequentes

Como converter CSV para JSON sem estragar CPF e CEP?

O risco é o conversor transformar 00845678909 em 845678909, porque o texto parece número. Aqui a conversão para número só acontece quando ela é reversível: o valor vira número, volta para texto e, se o texto de volta for diferente do original, o campo continua string. Zero à esquerda, número com mais de 15 dígitos e código de barras ficam como texto, e a página avisa quais colunas foram preservadas assim.

Qual delimitador usar, vírgula ou ponto e vírgula?

Use o que está no seu arquivo. Planilha exportada em português costuma sair com ponto e vírgula, porque a vírgula é o separador decimal aqui; arquivo gerado por sistema costuma vir com vírgula. Ao colar o conteúdo, o delimitador é reconhecido sozinho: o critério é qual caractere produz o mesmo número de colunas em todas as linhas, e não qual aparece mais vezes.

O que muda quando desligo o cabeçalho?

Com cabeçalho ligado, a primeira linha vira o nome dos campos e cada linha seguinte vira um objeto, no formato [{"nome": "Ana", "cpf": "008..."}]. Com o cabeçalho desligado, nenhuma linha é tratada como nome de campo e o resultado é uma lista de listas, no formato [["nome", "cpf"], ["Ana", "008..."]]. Desligue quando o arquivo começa direto nos dados.

O conversor entende campo com vírgula dentro e aspas?

Sim. O leitor respeita as aspas duplas do padrão RFC 4180: um campo entre aspas pode conter o delimitador, quebra de linha e aspas escapadas como duas aspas seguidas. Um endereço escrito como "Rua A, 100" continua sendo uma coluna só. Quebras de linha no estilo Windows também são tratadas.

O arquivo é enviado para algum servidor?

Não. A conversão roda no seu navegador, em JavaScript, e o download é gerado pelo próprio navegador a partir do texto que já está na página. Nenhuma linha da sua planilha sai do computador, e nada fica salvo aqui depois que você fecha a aba.

Por que true e false viram booleano e alguns números continuam texto?

O CSV não tem tipos: tudo é texto. Para o JSON ficar útil, a conversão reconhece true, false e null como valores do JSON, e reconhece número quando a conversão é segura. A regra de segurança é a mesma em todos os casos: se converter mudaria o valor, o campo fica como texto. É isso que impede 007 de virar 7 e um identificador de 20 dígitos de perder os últimos dígitos.