Converter JSON para CSV
Converta um array JSON em CSV confiável sem escrever scripts nem se preocupar com registros irregulares que deslocam colunas silenciosamente.
Executar grátis
Este conversor rigoroso usa as chaves do primeiro objeto como cabeçalho, verifica se todos os objetos têm exatamente as mesmas chaves e trata vírgulas, aspas e quebras de linha segundo as regras padrão de CSV. Arrays vazios, valores aninhados, JSON inválido e registros incompatíveis geram um erro claro, não uma planilha ambígua. A mesma conversão determinística está disponível no navegador e pela API.
Prepare um array uniforme de objetos simples
Comece com um JSON válido cujo valor no nível superior seja um array. Cada item deve ser um objeto, e cada valor de campo deve ser um escalar JSON: string, número, booleano ou null. Objetos e arrays aninhados são rejeitados de propósito porque não existe uma única maneira correta de colocá-los em uma célula CSV. Alguns conversores transformam valores aninhados em texto; outros achatam caminhos ou multiplicam linhas, e cada escolha altera o significado dos dados. Esta ferramenta permanece previsível ao exigir que o formato tabular esteja explícito antes da conversão. O array precisa conter pelo menos um objeto, e o primeiro objeto deve ter pelo menos uma chave. A ordem das chaves dele vira a ordem das colunas do CSV, então organize esse primeiro registro conforme você deseja ver a planilha. A ordem das chaves do objeto JSON é preservada. Os valores podem conter vírgulas, aspas, retornos de carro ou quebras de linha; você não precisa fazer o escape manual para CSV, pois o serializador cuida disso depois de analisar o JSON.
Entenda a validação rigorosa de cabeçalhos e linhas
A linha de cabeçalho é criada somente a partir das chaves do primeiro objeto. Em seguida, cada objeto restante é comparado com esse cabeçalho como um conjunto completo de chaves. Um registro com uma chave ausente falha, e um registro com uma chave extra também falha, mesmo que o valor adicional esteja vazio ou seja null. A ordem das chaves nos objetos seguintes não importa: os valores sempre são emitidos na ordem das colunas do primeiro objeto. Essa verificação rigorosa evita uma categoria sutil de erros de exportação. Um conversor permissivo pode criar uma união crescente de colunas, deixar espaços vazios sem explicação ou deslocar dados conforme o registro que introduziu uma propriedade. Aqui, a entrada irregular para com um erro que identifica o item incompatível. null é aceito como valor simples intencional e vira uma célula CSV vazia. Chaves ausentes não são tratadas como null porque ausência e null explícito podem representar estados diferentes no sistema de origem. Valide ou normalize registros irregulares antes de enviar o resultado uniforme.
Use o CSV com segurança em planilhas e fluxos
Após a validação, cada cabeçalho e valor é serializado como uma célula CSV. Células com vírgula, aspas, retorno de carro ou quebra de linha são envolvidas por aspas duplas, e as aspas internas são duplicadas. Números e booleanos usam sua representação textual JSON, enquanto null produz uma célula vazia. O resultado contém uma linha de cabeçalho seguida de uma linha por objeto, unidas por caracteres de nova linha. Como o algoritmo é determinístico e não usa rede, relógio, aleatoriedade, modelo ou serviço externo, entradas idênticas produzem saídas idênticas. Isso o torna adequado para testes, exportações agendadas, etapas de build e entregas repetíveis de dados. No navegador, cole o JSON e copie o CSV gerado sem enviar os dados para outro lugar. Para automatizar, chame a API pelo preço publicado de US$ 0,002 por solicitação. Salve o texto retornado com a extensão .csv e abra ou importe o arquivo configurando a vírgula como delimitador.
Casos de uso
Exporte registros de API para uma planilha
Transforme um array uniforme de uma API interna em colunas que as equipes de operações ou finanças possam ordenar, filtrar e revisar.
Crie dados de teste determinísticos
Gere arquivos CSV de teste estáveis a partir de registros JSON e falhe imediatamente se um registro adicionar ou omitir um campo.
Valide uma entrega de dados tabulares
Aplique um esquema compartilhado a todos os registros antes de entregar o CSV a um importador, analista, cliente ou fluxo de relatórios.
Perguntas frequentes
Como o cabeçalho CSV é escolhido?
O conversor usa as chaves do primeiro objeto na ordem existente. Todos os objetos seguintes devem ter exatamente o mesmo conjunto de chaves.
O que ocorre quando os objetos têm chaves diferentes?
A conversão falha com um erro de entrada inválida que identifica o item incompatível. Chaves extras e ausentes são rejeitadas.
Objetos ou arrays aninhados são aceitos como valores?
Não. Cada valor deve ser string, número, booleano ou null. Normalize ou achate os dados aninhados antes de usar este conversor rigoroso.
Como vírgulas, aspas e quebras de linha são tratadas?
Uma célula com qualquer um desses caracteres é envolvida por aspas duplas, e cada aspa dentro da célula é duplicada.
Quanto custa a conversão pela API?
Cada solicitação concluída pela API custa US$ 0,002. A versão do navegador é executada localmente e de graça.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/web/json-to-csv \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"[{\"name\":\"Ada\",\"role\":\"Engineer\",\"active\":true},{\"name\":\"Grace\",\"role\":\"Admiral\",\"active\":false}]"}'const res = await fetch("https://api.kit.forhosting.com/web/json-to-csv", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "[{\"name\":\"Ada\",\"role\":\"Engineer\",\"active\":true},{\"name\":\"Grace\",\"role\":\"Admiral\",\"active\":false}]"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/json-to-csv",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "[{\"name\":\"Ada\",\"role\":\"Engineer\",\"active\":true},{\"name\":\"Grace\",\"role\":\"Admiral\",\"active\":false}]"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/json-to-csv", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"[{\\"name\\":\\"Ada\\",\\"role\\":\\"Engineer\\",\\"active\\":true},{\\"name\\":\\"Grace\\",\\"role\\":\\"Admiral\\",\\"active\\":false}]"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"[{\"name\":\"Ada\",\"role\":\"Engineer\",\"active\":true},{\"name\":\"Grace\",\"role\":\"Admiral\",\"active\":false}]"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/json-to-csv", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"text": "[{\"name\":\"Ada\",\"role\":\"Engineer\",\"active\":true},{\"name\":\"Grace\",\"role\":\"Admiral\",\"active\":false}]"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.json_to_csv",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |