Ir para o conteúdo
OneKitly

Como converter JSON para CSV: achatar arrays de objetos em linhas e colunas

Publicado a 18/06/2025 · 4 min de leitura · Ferramentas para programadores

Daniel Okonkwo

Daniel OkonkwoProgramador front-end e redator de Tecnologia na OneKitly

Desempenho web · Formatos de ficheiro

Verificado a partir de 2 fontes

Ver perfil
Em resumo

Para converter JSON em CSV, comece por um array de objetos. Reúna a união de todas as chaves para formar a linha de cabeçalho e depois escreva uma linha por objeto, lendo cada campo pela ordem dos cabeçalhos. Escape qualquer valor que contenha uma vírgula, aspas duplas ou uma quebra de linha, envolvendo-o em aspas duplas e duplicando as aspas internas. Objetos e arrays aninhados devem primeiro ser achatados em colunas com notação de ponto, como address.city.

Um guia prático para transformar um array JSON de objetos num ficheiro CSV limpo, incluindo o achatamento de campos aninhados e os casos-limite.

Por que a forma do seu JSON importa

O CSV é um formato plano e bidimensional: linhas e colunas, nada mais. O JSON é uma árvore que pode aninhar objetos dentro de objetos e arrays dentro de arrays. O caso ideal para a conversão é um array de objetos de nível superior, onde cada objeto vira uma linha e cada chave uma coluna. Tudo mais profundo tem de ser remodelado antes de caber numa grelha.

Como objetos diferentes podem ter chaves diferentes, a linha de cabeçalho deve ser a união de todas as chaves vistas, não apenas as do primeiro objeto. Se ler apenas o primeiro registo, as colunas seguintes desaparecem em silêncio e o ficheiro fica desalinhado.

Achatar objetos e arrays aninhados

O truque padrão é a notação de ponto. Um objeto como {"address":{"city":"Lagos"}} vira uma coluna chamada address.city com o valor Lagos. O aninhamento pode ir tão fundo quanto quiser: user.address.city é perfeitamente válido. Os arrays são indexados por posição, portanto tags com ["api","web"] vira duas colunas, tags.0 e tags.1.

O achatamento funciona bem quando os arrays são curtos e de comprimento fixo. Quando um array pode crescer, as colunas indexadas explodem: um registo com cinquenta etiquetas produz cinquenta colunas. Nesse caso, costuma ser mais limpo manter o array como uma única cadeia unida, como "api;web;csv", ou dividir os dados numa segunda tabela relacionada.

Casos-limite que quebram conversores ingénuos

A falha mais comum são as aspas. Se um valor contém o delimitador (normalmente uma vírgula), aspas duplas ou uma quebra de linha, tem de ir entre aspas duplas, e quaisquer aspas duplas internas devem ser duplicadas. Assim o valor She said "hi" torna-se "She said ""hi""". Ignorá-lo corrompe todas as linhas seguintes.

Outras armadilhas: null versus cadeia vazia (ambos costumam surgir como célula vazia), booleanos e números que uma folha de cálculo pode reinterpretar (um código com zero à esquerda como 007 pode perder os zeros), e a codificação. Escreva sempre em UTF-8 e considere uma marca de ordem de bytes inicial se o ficheiro tiver de abrir corretamente em folhas de cálculo antigas.

Conversor de JSON para CSVTransforme um array JSON de objetos em valores separados por vírgulas com uma linha de cabeçalho. Aceita um ficheiro inteiro, para que um registo longo não tenha de passar pela área de transferência.Experimentar a ferramenta

Perguntas frequentes

E se o meu JSON for um único objeto e não um array?
Coloque-o num array para obter um CSV de uma linha. Se preferir cada chave na sua própria linha, transponha-o em duas colunas chave,valor.
Que delimitador devo usar, vírgula ou ponto e vírgula?
A vírgula é o padrão da norma CSV. Algumas configurações regionais de folha de cálculo esperam ponto e vírgula; se os seus valores já contêm vírgulas, um ponto e vírgula ou tabulação reduz o escape.
Como impeço que os zeros à esquerda desapareçam?
Os zeros estão no ficheiro CSV; a folha de cálculo remove-os ao tratar a coluna como número. Importe a coluna como texto, ou a folha reformata-a ao abrir.
Posso reconverter o CSV de volta em JSON?
Em parte. As colunas planas reconvertem-se limpo, mas as chaves com notação de ponto precisam de ser re-aninhadas e o CSV perde os tipos, pelo que números e booleanos voltam como cadeias se não os reanalisar.

Artigos que podem interessar-lhe

Todos os guias
ExplicaçãocamelCase vs snake_case: guia das convenções de nomenclatura no códigocamelCase, snake_case, PascalCase e kebab-case explicados: como cada um se apresenta, onde é a convenção e como escolher um de forma coerente.ExplicaçãoDe CSV para JSON: os cinco casos que partem qualquer conversorDelimitadores entre aspas, quebras de linha embutidas, tipos ambíguos, cabeçalhos repetidos e codificação. Cada caso passou pelo conversor e a saída exata está aqui — incluindo os dois que ele não salva.ExplicaçãoDe XML para JSON: atributos, repetição e a armadilha do array de um só elementoDois documentos que só diferem no número de filhos produzem duas formas JSON diferentes, e nenhum conversor os distingue sem um esquema. Além do que este faz mesmo com os atributos, o conteúdo misto e os espaços — e a única coisa que continua a não conseguir registar.ComparaçãoJSON vs XML: qual a diferença?JSON e XML armazenam ambos dados estruturados como texto, mas com compromissos diferentes. Eis como cada um se parece, onde cada um vence e como escolher.ExplicaçãoDe JSON para CSV quando a estrutura é aninhada: porque não há resposta certaAs mesmas duas encomendas saem com cinco colunas de um conversor e dez de outro, e nenhum está errado. Caminhos com pontos, arrays de escalares, arrays de objetos e registos com chaves diferentes: quatro decisões, tomadas por si e quase sempre em silêncio.ExplicaçãoEscapar uma string para JSON: três carateres são obrigatórios, e um é uma armadilhaA RFC 8259 exige escapar exatamente três coisas dentro de uma string JSON. Tudo o resto é facultativo. O que parte mesmo os pipelines é um meio-substituto solto: legal no texto JSON, impossível em UTF-8, e substituído em silêncio assim que os seus dados são escritos.

Ferramentas relacionadas

Fontes

Detetaste um erro neste artigo?

Como converter JSON para CSV: achatar arrays de objetos em linhas e colunas — OneKitly