⚖️ Comparativo Build·Desenvolvimento·13 min de leitura de leitura

JSON vs CSV (2026): Quando Usar Cada Formato e Como Converter

JSON e CSV são os dois formatos mais usados para troca de dados tabulares, mas cada um brilha em cenários diferentes. Este comparativo cobre diferenças técnicas reais (tipos, hierarquia, performance), casos de uso por audiência, limitações práticas e código de conversão entre os formatos.

Vitor Morais

Por Vitor Morais

Fundador do MochaLabz ·

{ }

Formate e valide JSON

Cole JSON, detecte erros de sintaxe e formate com indentação correta.

Usar formatador →

JSON e CSV são, juntos, responsáveis por 95% da troca de dados tabulares em qualquer sistema moderno. API devolve JSON, planilha devolve CSV. Dashboard exporta CSV; aplicação mobile consome JSON. A dúvida “qual formato usar?” aparece em todo projeto de dados, e a resposta certa depende de fatores que raramente são explicados claramente.

Este guia é o comparativo completo: diferenças técnicas reais (tipos, hierarquia, overhead), cenários onde cada um brilha, limitações práticas, código de conversão nos dois sentidos e quando considerar alternativas modernas como Parquet e NDJSON.

Diferenças estruturais fundamentais

JSON: hierárquico e tipado

[ { "id": 1, "nome": "João", "valor": 1500.50, "ativo": true, "criadoEm": "2026-04-20T12:00:00Z", "endereco": { "cidade": "São Paulo", "uf": "SP" }, "tags": ["vip", "recorrente"] }, { "id": 2, "nome": "Maria", "valor": 890.00, "ativo": false, "criadoEm": "2026-04-18T09:30:00Z", "endereco": { "cidade": "Rio de Janeiro", "uf": "RJ" }, "tags": [] } ]

CSV: plano e texto

id,nome,valor,ativo,criadoEm,endereco_cidade,endereco_uf,tags 1,João,1500.50,true,2026-04-20T12:00:00Z,São Paulo,SP,"vip,recorrente" 2,Maria,890.00,false,2026-04-18T09:30:00Z,Rio de Janeiro,RJ,

Observações:

  • CSV teve que “achatar” endereco.cidade → coluna endereco_cidade.
  • tags: [] (array vazio) virou célula vazia em CSV — ambiguidade com null.
  • true/false viraram texto em CSV (consumidor precisa converter de volta).
  • 1500.50 é número em JSON, texto em CSV.

Tabela comparativa completa

JSON vs CSV nos principais aspectos
CritérioJSONCSV
Tipos de dadosstring, number, bool, null, array, objectApenas string
HierarquiaSim (objetos aninhados, arrays)Não (plano)
Suporte a arrays dentro de campoNativoPrecisa serializar como string
Tamanho em bytes (mesmos dados)30-60% maior (chaves repetidas)Menor (só valores)
Compressão gzipExcelente (70-90%)Boa (60-80%)
Parse em JavaScriptJSON.parse nativo, <5msPrecisa biblioteca (PapaParse)
Abertura em ExcelNão abreAbre direto
Integração com Pandas/Rpd.read_json()pd.read_csv()
Streaming (linha-a-linha)Com NDJSON; JSON puro precisa parse completoNativo
Suporte em APIs RESTPadrão absolutoRaro
Suporte em planilhasRaroPadrão absoluto
Legibilidade humanaAlta em pequeno, baixa em massaAlta em massa, plana

Casos de uso onde JSON vence

1. APIs REST e GraphQL

Padrão universal. Content-Type: application/json é o default em qualquer API moderna. Frameworks (Express, FastAPI, Spring) têm serialização JSON embutida. CSV em API é exceção rara.

2. Configuração e schema

package.json, tsconfig.json, composer.json,app.json. Hierarquia natural + comentários mentais claros. CSV para config seria impraticável.

3. Dados hierárquicos

Pedido com múltiplos itens, usuário com lista de permissões, produto com variantes, endereço com sub-campos. Qualquer dado que naturalmente se encaixa em árvore.

4. Preservação de tipos entre sistemas

Data como ISO string parseável, booleanos como true/false, números decimais sem truncagem. Em integração sistema-sistema, JSON evita a classe de bugs de conversão.

5. Pequenas trocas de dados

Body de POST/PUT, payload de webhook, mensagem em fila (SQS, Kafka). Em volume pequeno (até alguns KB), JSON é o óbvio.

Casos de uso onde CSV vence

1. Exportação para usuário não-técnico

Gerente quer abrir no Excel. Analista quer importar no Google Sheets. Usuário quer ver tabela em editor de texto simples. CSV ganha por abertura universal.

2. Datasets tabulares grandes

Logs, exports de banco, dados de sensores, pipelines ETL. Milhões de linhas com colunas fixas. CSV 30-50% menor que JSON equivalente + parse mais rápido em ferramentas como Pandas e SQL.

3. Ingestão em banco de dados

Postgres COPY, MySQL LOAD DATA, MongoDB mongoimport — comandos nativos otimizados para CSV. Importar JSON exige conversão prévia ou comandos específicos mais lentos.

4. Análise com planilha, Pandas, R

Ferramentas estatísticas e analíticas consomem CSV diretamente. Para exploratory data analysis, CSV é padrão histórico.

5. Streaming linha-a-linha

Processar bilhões de linhas sem carregar tudo em memória. CSV é inerentemente streamable: uma linha por vez, parse independente. JSON puro exige parse de todo o array antes de acessar primeira entrada (NDJSON contorna isso).

Performance real: benchmarks

Dataset de exemplo: 100.000 linhas × 10 colunas, tipos mistos (4 strings, 3 números, 1 booleano, 1 data, 1 campo hierárquico).

Performance comparativa (100k linhas × 10 colunas)
CritérioJSONCSV
Tamanho em bytes~14 MB~9 MB
Tamanho após gzip~2,1 MB~1,8 MB
Serialização em Node.js~180 ms~320 ms (PapaParse)
Parse em Node.js~120 ms (JSON.parse nativo)~280 ms
Serialização em Python~140 ms (json)~260 ms (csv module)
Parse em Python + Pandas~220 ms~180 ms
Ingestão em PostgresNão nativo~15s via COPY

Contexto

Benchmark acima é aproximação. Em dados com campos muito longos (textos grandes), a diferença de tamanho cai — overhead das chaves JSON pesa proporcionalmente menos. Em dados com muitos campos curtos, JSON fica 2-3x maior.

Limitações específicas de cada formato

Limitações do CSV

  • Sem tipos: consumidor precisa saber que coluna “ativo” é booleano, qual coluna é data.
  • Quebra de linha em campo: aspas duplas necessárias, maioria dos parsers amadores quebra.
  • Delimitador ambíguo: vírgula em PT-BR conflita com decimal. Excel BR usa ponto-e-vírgula.
  • Encoding: sem BOM, Excel corrompe acentos.
  • Sem comentários: não dá pra documentar o arquivo.
  • Schema diferente por linha: CSV assume colunas fixas. Linhas com mais/menos colunas quebram.
  • Array em célula: serialização custom (separar por vírgula interna, JSON string, etc.).
  • Objeto aninhado: exige flatten que pode perder estrutura.

Limitações do JSON

  • Overhead: chaves repetidas em cada objeto infla 30-60% em dados tabulares.
  • Parse completo: JSON puro exige carregar tudo antes de acessar item (NDJSON resolve).
  • Sem suporte a tipos especiais: Date, BigInt, Set, Map — todos viram string ou array.
  • Sem comentários: JSON puro não permite comentários (JSON5/JSONC sim, mas não padrão).
  • Trailing comma: JSON estrito não permite vírgula após último item.
  • Pouco amigável em planilha: usuários não-técnicos não abrem.

NDJSON (JSON Lines): o compromisso

Formato onde cada linha é um objeto JSON válido independente. Une vantagens de CSV (streaming, linha-a-linha) e JSON (tipos, hierarquia).

{"id":1,"nome":"João","valor":1500.50} {"id":2,"nome":"Maria","valor":890.00} {"id":3,"nome":"Pedro","valor":1200.00}

Extensão .ndjson ou .jsonl. Padrão em logs estruturados (Elastic, Cloudflare, Datadog). Parse linha-a-linha sem carregar tudo. Tipos preservados. Quase todo ferramental moderno suporta.

Parquet: a alternativa para volume grande

Formato colunar com compressão embutida. 5-10x menor que CSV, 10-30x menor que JSON. Preserva tipos. Padrão em ecossistema big data (Spark, DuckDB, Pandas, BigQuery).

Parquet vs JSON vs CSV (dataset de 10M linhas)
CritérioTamanhoParse em Pandas
CSV~1,5 GB~45s
CSV gzip~350 MB~55s (descompactando)
JSON~2,8 GB~80s
JSON gzip~450 MB~90s
Parquet Snappy~180 MB~8s
Parquet ZSTD~130 MB~10s

Vai mais fundo

Para datasets analíticos acima de 10 milhões de linhas, Parquet é a escolha óbvia em 2026. Para datasets menores, JSON/CSV são mais práticos — Parquet exige biblioteca específica (não abre em editor de texto).

Conversão JSON → CSV em JavaScript

import Papa from "papaparse"; const data = [ { id: 1, nome: "João", valor: 1500.50 }, { id: 2, nome: "Maria", valor: 890.00 }, ]; // Conversão simples const csv = Papa.unparse(data); // Com BOM para Excel const csvComBom = "\uFEFF" + csv; // Download const blob = new Blob([csvComBom], { type: "text/csv;charset=utf-8" }); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = "dados.csv"; a.click(); URL.revokeObjectURL(url);

Conversão CSV → JSON em JavaScript

import Papa from "papaparse"; const csv = `id,nome,valor 1,João,1500.50 2,Maria,890.00`; const { data, errors } = Papa.parse(csv, { header: true, // primeira linha vira chave dynamicTyping: true, // converte números e booleanos automaticamente skipEmptyLines: true, }); console.log(data); // [ // { id: 1, nome: "João", valor: 1500.5 }, // { id: 2, nome: "Maria", valor: 890 }, // ]

Conversão em Python

import pandas as pd # JSON → CSV df = pd.read_json("dados.json") df.to_csv("dados.csv", index=False) # CSV → JSON df = pd.read_csv("dados.csv") df.to_json("dados.json", orient="records", force_ascii=False) # CSV → NDJSON (uma linha por JSON) df.to_json("dados.ndjson", orient="records", lines=True)

Regras práticas para decidir

Matriz de decisão JSON vs CSV por cenário
CritérioEscolhaPor quê
API REST / webhookJSONPadrão universal, tipos preservados
Export para Excel / SheetsCSV (ou XLSX)Abertura direta pelo usuário
Configuração de appJSONHierárquico, expressivo
Data warehouse / ETLCSV ou ParquetPerformance em massa
Log estruturadoNDJSONStreaming + tipos
Dados com hierarquia naturalJSONPreserva estrutura
Dataset > 10M linhas para análiseParquetCompressão + colunar
Backup simples de bancoCSVRestaura fácil com COPY/LOAD DATA
Troca via e-mail para clienteCSV ou XLSXCompatível com tudo
Integração entre microserviçosJSON / ProtobufTipos + schema

Convivência: quando ter os dois formatos

Sistemas maduros frequentemente oferecem exportação em ambos formatos. A interface típica em dashboard:

  • CSV: para “abrir no Excel” (usuário de negócio).
  • JSON: para “integrar com outro sistema” (dev).
  • XLSX: quando formatação visual importa (relatório formal).

Arquitetura de pipeline híbrida

Em ETL real, os formatos convivem:

  1. Coleta (API): fonte retorna JSON.
  2. Transformação: código parseia JSON, aplica regras de negócio.
  3. Armazenamento intermediário: NDJSON ou Parquet (streaming, tipado).
  4. Ingestão em banco: CSV via COPY / LOAD DATA (performance).
  5. Export para analista: XLSX ou CSV (abre no Excel).
  6. Integração com sistema externo: JSON via API.

Não é um vence outro — é cada um no seu nicho.

Erros clássicos por formato

Erros em JSON

  • Trailing comma: [{a:1}, ] quebra.
  • Aspas simples em vez de duplas: JSON estrito exige duplas.
  • Date serializada como número: interpretação ambígua no consumidor.
  • undefined em propriedade: inválido em JSON; use null.

Erros em CSV

  • Delimitador errado: vírgula em PT-BR quebra.
  • Sem BOM: acentos quebrados no Excel.
  • Aspas internas não escapadas: parser falha.
  • Schema inconsistente entre linhas: algumas com 8 colunas, outras com 7.

Alternativas além de JSON e CSV

Formatos alternativos em 2026
CritérioQuando usar
NDJSON (JSON Lines)Logs, streams, tipos preservados + linha-a-linha
ParquetAnálise colunar em escala, big data
Apache ArrowIn-memory, interop entre Python/R/JS
MessagePackBinário, mais compacto que JSON, mesmo schema
ProtobufSchema forte, performance, RPC
YAMLConfiguração legível por humanos
TOMLConfig flat, mais limpa que YAML
ORCSimilar ao Parquet, ecossistema Hadoop

Ferramentas úteis

  • Conversor JSON ↔ CSV (MochaLabz): grátis, no navegador, sem envio de dados para servidor.
  • Formatador JSON (MochaLabz): valida JSON inválido, formata com indentação correta.
  • jq: CLI para transformar JSON (padrão em pipeline Unix).
  • csvkit: CLI para transformar CSV (converter, ordenar, agregar).
  • Miller (mlr): CLI para transformar ambos formatos.
  • DuckDB: consultar CSV / JSON / Parquet com SQL.

JSON vs CSV em uma frase

CSV é para humano com planilha, JSON é para máquina com API. Em 2026, a escolha certa é por audiência e volume: CSV quando usuário final vai abrir no Excel, JSON quando outro sistema vai consumir. Para volumes grandes com análise pesada, Parquet vence os dois. Ambos convivem no mesmo pipeline — cada um no cenário em que ele é o melhor.

Perguntas frequentes

JSON ou CSV — qual é mais eficiente?+

CSV é mais compacto em bytes (sem chaves repetidas por linha), mas JSON comprime melhor com gzip (padrões repetitivos). Para leitura, CSV é mais rápido em linguagens low-level (C, Rust); JSON é mais rápido em linguagens dinâmicas (Python, JS) porque o parsing nativo é otimizado. Para 90% dos casos, a diferença é irrelevante — decida por caso de uso, não por microbenchmark.

CSV suporta tipos de dados?+

Não. CSV é texto plano — tudo é string. Datas, números decimais, booleanos, arrays — todos viram strings no CSV. O consumidor precisa converter de volta. JSON preserva: números são number, booleanos são true/false, arrays são [], objetos são {}. Se preservação de tipo importa (integração entre sistemas, ML pipelines), prefira JSON.

JSON suporta dados hierárquicos; CSV, não — isso é problema?+

Depende. Se seus dados são naturalmente tabulares (lista de pedidos com colunas fixas), CSV é simples e suficiente. Se são hierárquicos (pedido com items aninhados), JSON expressa naturalmente. Forçar JSON em CSV exige flatten (endereco.rua vira coluna); forçar CSV em JSON exige wrapper pra cada linha virar objeto. Use o formato que encaixa no dado.

Qual formato abrir melhor no Excel?+

CSV abre diretamente no Excel (com nuances de encoding e delimitador). JSON não abre nativamente — exige conversão. Para usuário final não-técnico que quer abrir em Excel, prefira CSV (ou XLSX). Para usuário técnico que usa Python/R/SQL, JSON funciona. Em dashboards, oferecer ambas opções é melhor UX: &ldquo;exportar CSV (planilha)&rdquo; e &ldquo;exportar JSON (API)&rdquo;.

Quando usar Parquet em vez de JSON/CSV?+

Parquet vence em 3 cenários: (1) volumes grandes (milhões de linhas) — compressão 3-10x melhor que CSV; (2) queries analíticas colunares — só lê colunas necessárias; (3) ecossistema big data (Spark, Pandas, DuckDB). Para datasets menores (até 100k linhas) ou troca manual com usuário final, JSON/CSV são mais práticos. Parquet exige biblioteca específica para abrir.

Como converter entre JSON e CSV?+

JavaScript: PapaParse.unparse(array) para JSON→CSV; PapaParse.parse(csv) para CSV→JSON. Python: pd.DataFrame.from_records(data).to_csv() e pd.read_csv().to_dict('records'). Ambos lidam com edge cases (vírgulas em campos, aspas, encoding). Para conversão ad-hoc, ferramenta online (MochaLabz) converte sem código.

JSON tem overhead grande pra listas grandes?+

Sim. Cada objeto carrega as chaves repetidas. Lista de 1M de objetos com 10 campos tem 1M×10 = 10M repetições de nomes. CSV tem as colunas 1x no header e só valores depois. Para dados tabulares enormes, CSV é 2-5x menor. NDJSON (JSON linhas, um objeto por linha) é compromisso: mais streaming-friendly que JSON puro, mas com o mesmo overhead de chaves.

Existe formato que seja &ldquo;melhor dos dois mundos&rdquo;?+

Para tabelas com tipos preservados: Parquet ou Arrow. Para streams estruturados: NDJSON (JSON Lines). Para hierárquico com eficiência: MessagePack, BSON, Protobuf. Cada um tem trade-off. Em 2026, o consenso: use JSON para APIs e transporte, CSV para planilha do usuário final, Parquet para análise em escala.

#json#csv#comparativo#parquet#ndjson#dados#api#excel#etl#formato

Artigos relacionados