Pular para o conteúdo

Converter JSON em CSV

Transforme respostas de API, exportações e JSON Lines em um CSV que abre sem problemas no Excel — os registros encontrados para você, campos aninhados achatados em colunas legíveis e IDs grandes mantidos dígito por dígito.

  • Nunca armazenado
  • Sem fila, sem espera
  • Sem cadastro, sem marca d'água

Como funciona

1

Adicione o JSON

Solte um arquivo .json ou .jsonl, ou cole o JSON direto na caixa.

2

Escolha os registros

A lista de registros é encontrada automaticamente, mesmo lá dentro de data.items. Escolha como os arrays são gravados e confira a pré-visualização.

3

Baixe

Um CSV com o delimitador e a codificação que você precisa, pronto para o Excel, o Google Sheets ou um banco de dados.

Achatando uma árvore em uma grade

JSON é uma árvore e CSV é um retângulo, e toda a conversão é a questão de como um vira o outro. O caso simples é um array de objetos que compartilham as mesmas chaves — cada objeto é uma linha, cada chave uma coluna, e nada se perde. É assim que a maioria das respostas de API e exportações se parece, e é por isso que isto costuma simplesmente funcionar. Tudo o que é complicado vem de documentos que não têm esse formato.

Objetos aninhados são achatados juntando as chaves, então um objeto de endereço dentro de um cliente vira colunas como address.city e address.postcode — uma convenção que toda planilha aceita e nenhum padrão define. Chaves que aparecem em alguns objetos e não em outros viram colunas vazias nas linhas que não as tinham, e essa é a resposta certa: a alternativa é descartar dados que só alguns registros trazem.

Arrays aninhados são onde uma grade realmente não consegue acompanhar. Um registro com três itens de pedido dentro é uma linha contendo uma lista, não três linhas — transformá-lo em três duplicaria todos os outros campos e mudaria, sem avisar, o que os dados significam. Então um array de objetos é expandido em linhas e os demais são gravados na própria célula como texto. Se o que você precisa são os itens do pedido, e não os pedidos, aponte a conversão para esse array; uma árvore com duas listas lado a lado não tem um único retângulo correto, e escolher um é uma decisão que só você pode tomar.

Dois detalhes pegam na saída. Valores que contêm vírgula, aspas ou quebra de linha vão entre aspas para sobreviver — o que é CSV correto e parece estranho se você olhar o arquivo bruto. E um identificador numérico longo é um risco quando o CSV chega a uma planilha: o Excel vai lê-lo como número, arredondá-lo depois de quinze dígitos e tirar qualquer zero à esquerda, o que é um problema causado pela planilha, e não pela conversão.

Quando você precisa de outra coisa

O jq é a ferramenta certa quando o formato precisa ser decidido, e não adivinhado: jq -r '.orders[] | [.id, .customer.name, .total] | @csv' pega exatamente os campos que você quer, exatamente do nível em que você os quer, que é o controle que um achatador automático não consegue oferecer. Ele também processa em fluxo, então o tamanho do arquivo deixa de ser uma preocupação.

Para dados aninhados em geral, o Miller — mlr --ijson --ocsv flatten — e o pandas.json_normalize do Python dão controle explícito sobre até que profundidade achatar e o que fazer com as listas. E, se o JSON é realmente hierárquico, e não tabular, convertê-lo em CSV pode ser simplesmente a ideia errada — um banco de dados ou um arquivo JSON delimitado por linhas mantém a estrutura que uma grade está prestes a descartar.

Perguntas frequentes

Como o JSON aninhado vira colunas?

Cada campo aninhado vira uma coluna com o nome do seu caminho: {"address": {"city": "Oslo"}} gera uma coluna address.city. As colunas aparecem na ordem em que surgem pela primeira vez nos seus dados, não em ordem alfabética, e registros sem um campo simplesmente deixam aquela célula vazia.

O que acontece com os arrays?

Você escolhe: juntar os valores em uma célula (“red; green”), espalhá-los por colunas numeradas (tags.0, tags.1), mantê-los como texto JSON ou — para um array de objetos, como itens de um pedido — gravar uma linha por item, com os campos do registro pai repetidos.

Números grandes são mantidos com exatidão?

Sim. IDs além do que o JavaScript consegue representar — do Twitter, do Discord e IDs de 64 bits de bancos de dados — são copiados dígito por dígito, enquanto a maioria dos conversores arredonda em silêncio 1234567890123456789 para 1234567890123456800.

JSON Lines (NDJSON) é compatível?

Sim. Um arquivo com um objeto JSON por linha é reconhecido automaticamente, e cada linha vira uma linha do CSV.

E se meu JSON tiver um erro?

Você recebe a linha e a coluna exatas, com o trecho problemático destacado, e uma explicação simples — por exemplo, uma vírgula sobrando no final ou aspas simples copiadas de código JavaScript.

Meus dados ficam armazenados em algum lugar?

Não. O JSON é lido e o CSV é gerado aqui; nada é enviado a lugar nenhum e nada fica armazenado.

Bom saber: Só um array de objetos pode ser expandido em linhas por vez; os outros arrays são gravados na própria célula. Arquivos muito grandes ficam limitados pela memória do seu navegador.

Coloque esta ferramenta no seu site

Grátis para qualquer blog, página de turma ou artigo de ajuda. Cole um único trecho de código e seus visitantes podem usá-la direto na sua página.