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.

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
| nome | cpf | cep | matricula | mensalidade | ativo |
|---|---|---|---|---|---|
| Ana Souza | 00845678909 | 01311000 | 12345678901234567890 | 249.90 | true |
| Bruno Lima | 12345678909 | 20040020 | 7 | 180 | false |
| Carla Dias | 98765432100 | 70040010 | 1024 | 315.5 | true |
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.
Calculadoras relacionadas
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.
Referências técnicas
- RFC 4180, formato Comma-Separated ValuesTécnica
- RFC 8259, formato JSONTécnica
- MDN Web Docs, Number.MAX_SAFE_INTEGERTécnica
- MDN Web Docs, JSON.stringify()Técnica
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.