Converter JSON para CSV
Achate o JSON numa tabela pronta para planilha. E volte de CSV para JSON quando precisar.
JSON de entrada
CSV gerado
Ver o texto gerado
O que é converter JSON para CSV
JSON e CSV resolvem problemas diferentes. O JSON, definido pela RFC 8259, é hierárquico: um valor pode conter outro objeto, que contém uma lista, que contém mais objetos, sem limite de profundidade. O CSV, descrito pela RFC 4180, é uma grade. Linhas e colunas, e nada além disso. Converter de um para o outro não é trocar a extensão do arquivo. É decidir como uma árvore vira tabela. Essa decisão é o trabalho de verdade, e é onde a maioria dos conversores erra calada.
A regra que esta ferramenta usa é o achatamento por caminho. Cada valor no fim de um ramo vira uma coluna cujo nome é o caminho até ele, separado por ponto: o objeto {"user":{"name":"Ana"}} vira a coluna user.name. Um array de objetos na raiz vira o conjunto de linhas, que é o caso mais comum, porque é o formato que praticamente toda API REST devolve. Um objeto único na raiz vira uma linha só. E o cabeçalho é a união das chaves de todos os registros, não só as do primeiro. Se o campo cpf aparece pela primeira vez no terceiro item, ele continua virando coluna, com célula vazia nos dois primeiros.
A conversão inteira acontece dentro do seu navegador. Campo com vírgula, aspas ou quebra de linha no meio do texto sai entre aspas, com a aspa interna duplicada, exatamente como a RFC 4180 manda. É a parte do CSV que mais quebra quando alguém monta o arquivo na mão. Nenhum byte do seu JSON sai do dispositivo, o que pesa bastante quando o arquivo é uma resposta de API cheia de dado de cliente. A ferramenta é gratuita, não pede cadastro e não tem limite de conversões.
Como funciona a conversão
- Cole o JSON na área de texto ou mande um arquivo .json. Já vem um exemplo carregado, com objeto aninhado, lista, chave ausente e valor nulo, para você ver o comportamento antes de usar os seus dados.
- Escolha como as listas de valores simples viram célula. Unidas numa coluna só, e aí a coluna tags recebe "cliente;ativo". Ou espalhadas em colunas indexadas, tags.0 e tags.1. Unir é melhor para ler na planilha. Indexar é o único jeito de voltar de CSV para JSON sem perder a estrutura.
- Ajuste o separador de coluna e o que vai aparecer no lugar do valor null. Para abrir direto no Excel em português, use ponto e vírgula, deixe o BOM UTF-8 ligado e, se houver valores decimais, marque a opção de decimal com vírgula.
- Confira a prévia em tabela. Ela mostra exatamente as colunas que o achatamento gerou, na ordem em que vão para o arquivo. Se algum campo aninhado virou uma coluna que você não esperava, o problema aparece aqui, e não depois, na planilha.
- Copie o resultado ou baixe o arquivo .csv. Para o caminho inverso, troque a aba para "CSV para JSON". A ferramenta remonta o aninhamento a partir dos pontos no cabeçalho e devolve o JSON identado.
Para que serve
- Resposta de API virando planilha Você chamou um endpoint REST, copiou o JSON do navegador ou do cliente HTTP e precisa entregar aquilo como tabela. Cole e baixe o CSV. Os objetos aninhados viram colunas com o caminho completo, sem você escrever mais um script descartável.
- Exportar dados para o time de negócio Quem vai ler o dado não abre JSON. Gere um CSV com separador ponto e vírgula e BOM UTF-8 e o arquivo abre no Excel em português com os acentos certos, direto no duplo clique.
- Carga de dados e seed de banco Muita ferramenta de importação só aceita CSV, seja banco de dados, CRM ou plataforma de e-mail. Converta o JSON de origem, confira as colunas na prévia e faça a carga. No caminho contrário, transforme a planilha que a equipe preencheu em JSON para alimentar uma API ou um arquivo de seed.
- Análise rápida sem escrever código Para contar, ordenar ou somar campos de um JSON, uma planilha resolve em segundos o que levaria minutos num script. Converta, jogue no Google Sheets ou no LibreOffice Calc e siga.
Perguntas frequentes
Como o JSON aninhado vira coluna?
Pelo caminho até o valor, separado por ponto. O objeto {"user":{"name":"Ana","endereco":{"uf":"SP"}}} gera as colunas user.name e user.endereco.uf. Não tem limite de profundidade: um valor a quatro níveis vira a.b.c.d. É a mesma convenção de caminho por ponto que o jq e outras ferramentas de linha de comando usam, então o cabeçalho continua legível para quem for reimportar o arquivo depois.
E quando o campo é uma lista, tipo ["cliente","ativo"]?
Você escolhe entre duas opções, e elas não são equivalentes. "Uma célula só" junta os valores com ponto e vírgula, então a coluna tags recebe "cliente;ativo". Fica compacto e ótimo de ler, mas a informação de que aquilo era uma lista se perde. Na volta, vira uma string comum. "Colunas separadas" gera tags.0 e tags.1: ocupa mais colunas e a largura da tabela passa a depender do maior item, só que é o único modo que sobrevive à ida e à volta, porque é o índice numérico no cabeçalho que permite remontar o array. Quando o array contém objetos em vez de valores simples, a ferramenta sempre indexa. Não existe jeito de espremer um objeto numa célula sem perder dado.
Se um item do JSON não tem uma das chaves, o que acontece?
A célula fica vazia e a coluna continua existindo. O cabeçalho é a união de todas as chaves encontradas em todos os registros, na ordem em que cada uma aparece pela primeira vez. Vale prestar atenção nisso, porque é o erro clássico de conversor de JSON para CSV: pegar só as chaves do primeiro item e descartar, sem avisar, tudo que existe do segundo em diante. Se a sua base tem registros com campos opcionais, esse detalhe é a diferença entre um CSV correto e um CSV incompleto.
Por que a conversão de CSV para JSON deixa tudo como texto?
Porque inferência silenciosa de tipo destrói dado brasileiro. Um CPF como "01234567890" vira 1234567890 se alguém o interpretar como número. O zero da frente some e aquilo deixa de ser um CPF. O mesmo acontece com CEP, DDD, telefone, código de barras e qualquer identificador que comece com zero. A opção "converter tipos" existe, mas vem desligada. Quando você liga, a conversão continua conservadora: só vira número quando a volta é exata, ou seja, quando String(Number(valor)) devolve exatamente o texto original. Isso já descarta sozinho zeros à esquerda, "1.50" e inteiros acima de 2^53, que perderiam precisão em ponto flutuante.
Como abrir esse CSV no Excel sem quebrar os acentos?
Duas configurações resolvem. A primeira é manter o BOM UTF-8 ligado, a marca de três bytes no começo do arquivo que faz o Excel do Windows reconhecer a codificação. Sem ela, "São Paulo" abre como "São Paulo". A segunda é usar ponto e vírgula como separador, porque o Excel em português usa a vírgula como separador decimal e, por causa disso, espera ponto e vírgula entre as colunas. Se o arquivo tem números decimais, ligue também a opção de decimal com vírgula. Com esses ajustes o arquivo abre certo no duplo clique, sem passar pelo assistente de importação.
Meu JSON é {"data": [...]}. Preciso extrair a lista antes?
Não. Quando a raiz é um objeto que só embrulha uma lista, o formato que quase toda API paginada devolve, com campos como total, page ou next do lado, a ferramenta usa a lista de dentro como as linhas da tabela e mostra um aviso dizendo o que fez e quais campos ficaram de fora. Se você preferir o comportamento literal, basta desmarcar a opção. Aí o objeto inteiro vira uma linha só, com colunas data.0.id, data.1.id e por aí vai.
Meus dados são enviados para algum servidor?
Não. A conversão roda inteira no seu navegador, no seu próprio dispositivo. Nenhum byte do JSON ou do CSV é transmitido. Dá para verificar: abra as ferramentas de desenvolvedor, vá até a aba de rede e faça uma conversão. Não vai aparecer requisição nenhuma. É por isso que a ferramenta serve para resposta de API com dado de cliente, justamente o que você não deveria colar num site que processa no servidor.
Existe limite de tamanho?
O limite prático é a memória da aba. A ferramenta avisa quando o texto passa de cinco milhões de caracteres e recusa arquivo acima de 20 MB, porque daí para cima a conversão travaria a página em vez de terminar. Para base maior que isso, o caminho certo é uma ferramenta de linha de comando como o jq, que lê o arquivo aos poucos em vez de carregar tudo na memória de uma vez.
Ferramentas relacionadas
Fontes
Os limites e formatos aplicados por esta ferramenta vêm das especificações oficiais abaixo, não de terceiros:
- RFC 8259 · The JavaScript Object Notation (JSON) Data Interchange Format Especificação oficial do JSON. Define os seis tipos de valor e por que null é diferente de string vazia, que é a distinção que você escolhe como representar no CSV.
- RFC 4180 · Common Format and MIME Type for CSV Files Documento que padroniza o CSV. Campo com vírgula, aspas ou quebra de linha precisa ir entre aspas duplas, e a aspa interna é escrita duplicada. É a regra que mantém o arquivo legível em qualquer planilha.
- ECMAScript · especificação de JSON.parse Norma da ECMA que define como um número JSON é interpretado: ponto flutuante de dupla precisão. É a razão técnica de inteiros acima de 2^53 perderem precisão quando viram número, e o motivo de a ferramenta preferir manter esses campos como texto.
- Importar ou exportar arquivos de texto (.txt ou .csv) · Suporte da Microsoft Orientação oficial da Microsoft para abrir no Excel o CSV gerado aqui. Explica que a leitura depende do separador de lista definido nas configurações regionais do Windows, que é o motivo de o Excel em português esperar ponto e vírgula.
Termos relacionados
Esta página responde a quem procura por: