Pular para o conteúdo principal

Converter JSON em CSV

Esta ferramenta converte um array de registros em uma grade pronta para planilha no seu navegador. Objetos e arrays aninhados viram caminhos de coluna explícitos e reversíveis, em vez de serem achatados e descartados, e o conjunto de colunas é a união de todos os registros, então campos que aparecem só em linhas posteriores sobrevivem.

Só local
JSON
0 B1 linhaLin. 1, Col. 1
CSVsomente leitura
0 B1 linha

Como funciona o Converter JSON em CSV?

A parte difícil desta conversão não é a sintaxe, é a incompatibilidade de formas. CSV é um retângulo: um conjunto fixo de colunas, uma linha por registro, um escalar por célula. JSON é uma árvore. Todo conversor precisa decidir o que acontece quando um registro contém {"customer":{"name":"Ada"}}, e a maioria decide silenciosamente — descartando o objeto aninhado, colando [object Object] na célula ou serializando a subárvore inteira de volta para JSON dentro de um único campo.

A decisão aqui é uma codificação de caminhos explícita: customer.name para um membro de objeto e tags[0] para um índice de array. As duas notações são deliberadamente diferentes para que o mapeamento seja reversível: só com pontos, a.0 não consegue dizer se a é um array ou um objeto com uma chave chamada “0”, e uma ida e volta pelo CSV teria de adivinhar. Cole o resultado na ferramenta Converter CSV em JSON e você recebe o documento com que começou.

A segunda decisão é o conjunto de colunas. A implementação óbvia lê as chaves do primeiro registro e as usa como cabeçalho — e perde silenciosamente todo campo que só aparece depois. Exportações reais são heterogêneas: uma observação opcional em um pedido a cada cinquenta, um desconto que se aplica só às vezes. O conjunto de colunas aqui é a união de todos os registros, na ordem em que aparecem pela primeira vez, então nada é descartado e a ordenação continua natural.

Para arrays, há uma escolha, porque não existe resposta certa. Explode dá a cada elemento a própria coluna e faz o round trip com exatidão. Join os coloca em uma célula só, separados por um delimitador, que é o que quem vai abrir isso numa planilha geralmente quer — e é com perdas, então vale só para arrays de escalares; um array de objetos é sempre explodido, porque juntá-lo o destruiria.

O uso de aspas segue a RFC 4180: um campo recebe aspas quando contém o delimitador, uma aspa dupla, uma quebra de linha ou espaço em branco no início ou no fim que a planilha removeria. Aspas dentro de um campo entre aspas são dobradas. Todo o resto é emitido sem aspas, porque um arquivo em que toda célula está entre aspas é mais difícil de ler e não é mais correto.

JSON de entrada

[
  { "id": 1, "user": { "name": "Ada" }, "tags": ["a","b"] },
  { "id": 2, "user": { "name": "Grace" }, "tags": ["c"], "vip": true }
]

CSV de saída

id,user.name,tags[0],tags[1],vip
1,Ada,a,b,
2,Grace,c,,true

JSON de entrada → CSV de saída

JSON de entrada

[
  { "id": 1, "customer": { "name": "Ada", "city": "London" }, "total": 42.5 },
  { "id": 2, "customer": { "name": "Grace", "city": "New York" }, "total": 7 }
]

CSV de saída

id,customer.name,customer.city,total
1,Ada,London,42.5
2,Grace,New York,7

Quais opções e casos-limite o Converter JSON em CSV suporta?

Referência técnica e opções
ParâmetroTipoPadrãoComportamento e casos-limite
Delimitador, ; tab |,Ponto e vírgula é o padrão em locais onde a vírgula é o separador decimal, e é o que o Excel espera. Tab evita as aspas na maioria das vezes, pois tabulações são raras dentro dos dados.
Modo de arrayexplode | joinexplodeExplode gera tags[0], tags[1] e faz um round-trip exato. Join colapsa escalares em uma única célula e é perda de dados. Um array de objetos é sempre explodido, independentemente, pois uni-lo perderia a estrutura completamente.
Tudo entre aspasbooleanofalsePor padrão, um campo é colocado entre aspas apenas quando a RFC 4180 exige. Alguns importadores rigorosos preferem tudo entre aspas; a saída é válida de qualquer maneira.
Linha de cabeçalhobooleanotrueEmite os caminhos das colunas achatados como a primeira linha. Sem eles, os significados das colunas são apenas posicionais, e uma viagem de volta para o JSON não pode reconstruir a aninhamento.
Conjunto de colunasuniãotodos os registrosToda coluna que aparece em qualquer registro, na ordem da primeira ocorrência. Ler o cabeçalho do primeiro registro é a forma mais comum como um conversor descarta dados silenciosamente.
nullvalorcélula vaziaEscrito como um campo vazio em vez do texto "null", porque uma planilha trata a palavra literal como uma string. Isso significa que nulo e ausente são indistinguíveis na saída — inerente ao CSV, não a esta ferramenta.
Formato raizarray | objectarrayUm array de registros é a entrada esperada. Um único objeto se torna uma linha. Um objeto com exatamente um membro de array — o envelope {"data":[…]} que a maioria das APIs retorna — usa esse array e o indica.
Tamanho de entradabytes8 MBA conversão é executada na thread principal, então acima desse limite ela é recusada em vez de tentada. Nada é enviado em qualquer tamanho.

Perguntas frequentes

O que acontece com objetos aninhados?

Eles viram nomes de coluna com pontos: {"customer":{"name":"Ada"}} produz uma coluna chamada customer.name. Arrays usam notação de colchetes — tags[0], tags[1] — então os dois são distinguíveis e a conversão é reversível. Essa é a diferença para a maioria dos conversores, que descartam o objeto aninhado, escrevem [object Object] na célula ou enfiam um blob JSON em um único campo.

Meus registros têm campos diferentes. Alguns serão descartados?

Não. O conjunto de colunas é a união dos campos de todos os registros, na ordem em que aparecem pela primeira vez, então uma observação que aparece em apenas um pedido a cada cinquenta ganha a própria coluna, com células vazias nos demais lugares. Conversores que leem o cabeçalho só do primeiro registro perdem esses campos silenciosamente, que é a falha que mais vale evitar aqui.

Consigo converter o CSV de volta ao JSON original?

Sim, com o modo explode e a linha de cabeçalho ligados. Cole o resultado na ferramenta Converter CSV em JSON e o aninhamento é reconstruído a partir dos caminhos de coluna. Duas ressalvas são inerentes ao CSV, e não à ferramenta: uma célula não distingue a string "22201" do número 22201, nem distingue uma string vazia de um campo ausente.

Por que minha coluna de números aparece entre aspas no Excel, ou como data?

São as heurísticas de importação do Excel, e não o arquivo. Ele reinterpreta agressivamente qualquer coisa que pareça data e remove zeros à esquerda de qualquer coisa que pareça número, o que estraga códigos de produto e CEPs. Use Dados → De Texto/CSV em vez de dar dois cliques no arquivo, e defina essas colunas como Texto na caixa de importação.

Meu JSON é enviado a algum lugar?

Não. A conversão roda no seu navegador. Abra o DevTools, vá ao painel Network e cole um documento — nenhuma requisição o carrega. Isso importa aqui mais do que parece: o JSON que as pessoas convertem em CSV costuma ser uma exportação de registros reais, que é exatamente o dado que não deveria passar por um servidor desconhecido a caminho de uma planilha.

Qual delimitador devo escolher?

Vírgula, a menos que você tenha um motivo. Ponto e vírgula se o arquivo vai para alguém em um locale onde a vírgula é o separador decimal, porque é o que o Excel dessa pessoa espera — um arquivo delimitado por vírgula abre lá como uma única coluna. Tabulação se os dados têm muitas vírgulas e aspas, já que tabulações quase nunca aparecem dentro de campos e o arquivo continua legível.

O que mais o Converter JSON em CSV pode fazer?