Conversor de JSON para CSV online

O conversor de JSON para CSV transforma uma lista de objetos JSON em uma tabela, com uma linha para cada objeto e uma coluna para cada chave. Você escolhe o separador (vírgula, ponto e vírgula ou tabulação), pode achatar objetos aninhados e baixar o resultado. A conversão é feita no seu navegador, sem enviar os dados a nenhum servidor.

Atualizado em · Por Leonardo Gaertner

Achou um resultado errado ou tem uma sugestão? Avise por e-mail.

Como usar

  1. Cole o JSON no campo da esquerda, ou clique em Abrir arquivo. Ele deve ser uma lista de objetos.
  2. Escolha o separador. Para abrir no Excel em português, use ponto e vírgula.
  3. Deixe marcado Achatar objetos aninhados se quiser uma coluna para cada campo interno (por exemplo, endereco.rua).
  4. Clique em Copiar resultado ou em Baixar arquivo.

Como funciona

A primeira linha do CSV traz os nomes das colunas, que são as chaves de todos os objetos, na ordem em que aparecem. Se um objeto não tem uma das chaves, a célula fica vazia. Valores nulos também viram células vazias.

O CSV é uma tabela plana, então o que é aninhado precisa de um tratamento. Com a opção de achatar, um objeto dentro de outro vira colunas com o nome unido por ponto, como endereco.rua. Listas, e objetos quando a opção está desligada, são gravados como JSON dentro da célula.

Células com o separador, aspas, quebra de linha ou espaços nas pontas vão entre aspas, e as aspas internas são duplicadas, como manda a RFC 4180. O CSV não guarda tipos: números, textos e booleanos ficam todos como texto, e ao ler de volta é preciso decidir quais colunas são números.

Exemplo

JSON: [{"nome":"Ana","end":{"cidade":"Recife"}},{"nome":"Bia","idade":25}]

CSV:

nome,end.cidade,idade

Ana,Recife,

Bia,,25

Fonte: RFC 4180: o formato CSV; RFC 8259: o formato JSON

Em código

Para gerar em código um CSV que o Excel em português abre certo, use ponto e vírgula, vírgula decimal e o BOM no início do arquivo.

JavaScript
// Monta um CSV que o Excel em português abre certo: ponto e vírgula, vírgula
// decimal e BOM para reconhecer o UTF-8
function csvParaExcel(linhas) {
  const colunas = Object.keys(linhas[0]);
  const celula = (v) => {
    const s = v == null ? '' : typeof v === 'number' ? String(v).replace('.', ',') : String(v);
    return /[;"\r\n]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s;
  };
  const texto = [colunas, ...linhas.map((l) => colunas.map((c) => l[c]))]
    .map((campos) => campos.map(celula).join(';'))
    .join('\r\n');
  return '' + texto;
}
Python
import csv


def ler_csv_excel(caminho: str) -> list[dict]:
    # utf-8-sig ignora o BOM que o Excel grava no começo do arquivo
    with open(caminho, encoding="utf-8-sig", newline="") as f:
        return list(csv.DictReader(f, delimiter=";"))


def escrever_csv_excel(caminho: str, linhas: list[dict]) -> None:
    with open(caminho, "w", encoding="utf-8-sig", newline="") as f:
        w = csv.DictWriter(f, fieldnames=list(linhas[0]), delimiter=";")
        w.writeheader()
        w.writerows(linhas)

Escreve e lê CSV do Excel, com o BOM.

PHP
<?php
function lerCsvExcel(string $caminho): array
{
    $f = fopen($caminho, 'r');
    if (fread($f, 3) !== "\xEF\xBB\xBF") {
        rewind($f); // não tinha BOM: volta ao começo
    }
    $cabecalho = fgetcsv($f, null, ';', '"', '');
    $linhas = [];
    while (($campos = fgetcsv($f, null, ';', '"', '')) !== false) {
        if ($campos !== [null]) { // pula linhas em branco
            $linhas[] = array_combine($cabecalho, $campos);
        }
    }
    fclose($f);
    return $linhas;
}

Lê o CSV salvo pelo Excel.

Perguntas frequentes

Como abrir o CSV no Excel com os acentos certos?

Use o botão Baixar arquivo, que grava o CSV em UTF-8 com a marca BOM, e o Excel reconhece os acentos. Se copiar e colar o texto em um arquivo seu, salve em UTF-8 com BOM ou importe pela opção de dados de texto/CSV, escolhendo a codificação UTF-8.

Por que o Excel abre tudo em uma coluna só?

Porque o Excel em português espera ponto e vírgula como separador, já que a vírgula é o separador decimal. Escolha Ponto e vírgula na lista de separadores e gere o CSV de novo.

O que acontece com listas e objetos dentro do JSON?

Objetos aninhados viram colunas com nomes como endereco.rua, se a opção de achatar estiver marcada. Listas são gravadas como JSON dentro de uma célula, porque uma tabela plana não tem como representar vários valores em um campo.

Posso usar o CSV gerado com dados de terceiros sem cuidado?

Com cuidado. Planilhas podem executar como fórmula uma célula que começa com =, +, - ou @. Se os dados vêm de fora, revise essas células antes de abrir o arquivo no Excel ou no Google Planilhas. A ferramenta não altera o conteúdo das células.