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