Converter JSON em CSV

Funciona no seu dispositivo · Seu arquivo nunca sai do seu dispositivo.

Solte um arquivo .json ou cole o JSON direto da resposta de uma API e receba um CSV que abre no Excel, no Google Planilhas ou em qualquer tela de importação. Uma lista no topo dá uma linha por item; senão, é usada a lista de registros mais longa do documento, então {"results": [...], "count": 2} dá uma linha por resultado; um objeto sem nenhuma lista vira uma linha.

As regras são fixas, para o resultado ser previsível: objetos aninhados viram colunas separadas por ponto (endereco.cidade), uma lista de valores simples é unida com ponto e vírgula numa célula só, e uma lista de objetos dentro de um registro ganha colunas numeradas (itens.0.nome). O cabeçalho é a união de todas as chaves encontradas, na ordem em que aparecem, então registros com campos faltando simplesmente deixam a célula vazia.

O CSV segue a RFC 4180 — campos com vírgulas, aspas ou quebras de linha são colocados entre aspas corretamente — em UTF-8, com um BOM opcional para o Excel mostrar direito qualquer escrita, acentos, cedilhas e símbolos. Uma célula que começa com =, +, - ou @ ganha um apóstrofo na frente, para a planilha mostrá-la como texto em vez de executá-la como fórmula. Você vê as primeiras 200 linhas antes de baixar, e nada sai do seu aparelho.

Como Converter JSON em CSV

  1. Solte um arquivo JSON, ou cole o JSON na caixa.
  2. Escolha o separador de colunas da saída (vírgula por padrão) e se quer o BOM do Excel.
  3. Clique em «Converter para CSV» e confira a prévia das primeiras linhas.
  4. Baixe o .csv.

Formatos suportados e limites

Entrada
JSON (.json) — arquivo ou texto colado, UTF-8
Saída
CSV, RFC 4180, UTF-8, fim de linha CRLF, BOM opcional
Aninhamento
Objetos → colunas com ponto; listas de valores → unidas com ;
Separador
Vírgula, ponto e vírgula, tabulação ou barra vertical
Onde roda
No seu navegador — sem enviar nada

Não serve para: Um único objeto muito aninhado sem lista nenhuma dentro — converte, mas como uma linha larguíssima, não como uma tabela.

Qual lista vira as linhas

Uma lista no topo do documento são as linhas. Senão, a ferramenta procura no documento, até oito níveis de profundidade, a lista de objetos mais longa. Assim, {"response": {"data": {"items": [...]}}} e {"results": [...], "count": 2, "next": null} dão uma linha por item, e a linha embaixo do resultado diz qual lista foi usada, por exemplo results. Valores ao lado dessa lista, como count e next, não fazem parte de nenhum registro e ficam de fora.

Entre duas listas do mesmo tamanho, vence a que está mais perto do topo. Para usar uma lista mais curta, copie-a do [ até o ] e cole só ela. Um documento sem lista de objetos vira uma linha, e envoltórios com uma chave só são pulados, então {"order": {"id": 7, "total": 12}} dá as colunas id e total.

Como os valores são escritos nas células

O texto é copiado exatamente, inclusive as datas, que ficam na forma que o JSON tem, como 2024-01-05T10:00:00Z. true e false são escritos como palavras. null, uma lista vazia e um objeto vazio viram todos uma célula vazia, então no CSV parecem iguais a um campo que estava faltando.

Um número é escrito exatamente como está no JSON: 1.0 continua 1.0, 1e21 continua 1e21, e um ID como 12345678901234567890 mantém todos os dígitos, mesmo sem aspas. Um leitor de JSON comum transformaria esse ID em 12345678901234567000.

Listas dentro de listas, e chaves que já têm ponto

Uma lista de listas é aberta um nível: "m": [[1, 2], [3]] dá uma coluna m.0 com 1;2 e uma coluna m.1 com 3. Uma lista que mistura objetos e valores simples numera todas as entradas, então "x": [{"z": 1}, 2] dá x.0.z e x.1.

Os nomes de coluna são formados juntando as chaves com pontos, então uma chave que já tem ponto pode coincidir com uma aninhada: {"a.b": 1, "a": {"b": 2}} geraria a.b duas vezes. A segunda ganha um sufixo, então as colunas ficam a.b e a.b_2, e os dois valores são mantidos.

O separador, e células que começam com =

Vírgula é a escolha comum. Ponto e vírgula serve para uma planilha configurada num idioma que escreve decimais com vírgula, como o português, em que um arquivo separado por vírgulas muitas vezes abre numa coluna só. Tabulação e barra vertical são para sistemas que as pedem. Seja qual for o separador, o arquivo leva a extensão .csv.

Uma célula que começa com =, +, - ou @ é uma fórmula para a planilha, que a executaria ao abrir. Uma célula assim ganha um apóstrofo na frente, a marca que as próprias planilhas usam para dizer «isto é texto», então =1+1 é escrito como '=1+1. Números simples como -5 ou +3.5 ficam como estão.

Perguntas frequentes

Meus arquivos são enviados para algum servidor?
Não. A conversão acontece inteiramente no seu navegador, com a capacidade do seu próprio aparelho. O arquivo não sai do seu computador nem do seu celular, e, depois que você usa a ferramenta uma vez, ela continua funcionando sem internet (as de vídeo, de reconhecimento de texto e de remoção de fundo baixam o motor deste site no primeiro uso).
O que acontece com objetos e listas aninhados?
Um objeto aninhado é achatado em colunas com ponto: {"endereco":{"cidade":"Recife"}} vira uma coluna chamada endereco.cidade. Uma lista de valores simples ("tags": ["a","b"]) é escrita como a;b numa célula só. Uma lista de objetos dentro de um registro ganha colunas numeradas, como itens.0.nome, itens.1.nome.
Meu JSON é um objeto, não uma lista — o que eu recebo?
A lista de registros mais longa que houver nele vira as linhas — {"results": [...], "count": 2, "next": null} dá uma linha por resultado —, e a linha do resultado diz qual lista foi usada. Valores ao lado dessa lista não fazem parte de nenhum registro e ficam de fora. Um objeto sem nenhuma lista é escrito como uma única linha, com uma coluna por chave.
Por que o Excel mostra caracteres estranhos, e como resolvo?
O Excel adivinha a codificação se o arquivo não começar com um BOM. A opção «Adicionar BOM para o Excel» vem ligada por padrão e acrescenta essa marca de três bytes; desligue para ferramentas que exigem UTF-8 puro.

Ferramentas relacionadas

Mais em Planilhas e dados

Esta página em outros idiomas: English · العربية · Deutsch · Français · Español · Русский · 中文 · हिन्दी · Türkçe · עברית · فارسی · اردو · Bahasa Indonesia · বাংলা