CSV vs JSON vs XML: Escolhendo o Formato de Dados Certo
Toda troca de dados requer a escolha de um formato. CSV, JSON e XML são as três opções mais comuns, cada uma com pontos fortes distintos. Escolher o formato errado leva a dores de cabeça com parsing, payloads inchados e tempo de desenvolvimento desperdiçado. Este guia ajuda você a escolher a ferramenta certa para o trabalho.
Visão Geral dos Formatos
CSV (Valores Separados por Vírgula)
name,age,city
Alice,30,London
Bob,25,Paris
Charlie,35,Tokyo
- Estrutura: Plana, tabular (linhas e colunas)
- Sistema de tipos: Nenhum (tudo é texto)
- Aninhamento: Não suportado
- Tamanho: Menor para dados tabulares
JSON (JavaScript Object Notation)
[
{"name": "Alice", "age": 30, "city": "London"},
{"name": "Bob", "age": 25, "city": "Paris"},
{"name": "Charlie", "age": 35, "city": "Tokyo"}
]
- Estrutura: Hierárquica (objetos, arrays)
- Sistema de tipos: String, number, boolean, null, object, array
- Aninhamento: Suporte nativo
- Tamanho: Moderado
XML (eXtensible Markup Language)
<people>
<person>
<name>Alice</name>
<age>30</age>
<city>London</city>
</person>
<person>
<name>Bob</name>
<age>25</age>
<city>Paris</city>
</person>
</people>
- Estrutura: Hierárquica com atributos e elementos
- Sistema de tipos: Via XML Schema (XSD)
- Aninhamento: Suporte nativo
- Tamanho: Maior (tags verbosas)
Comparação Detalhada
| Recurso | CSV | JSON | XML |
|---|---|---|---|
| Legibilidade | Alta (tabular) | Alta | Baixa (verboso) |
| Tamanho do arquivo | Menor | Médio | Maior |
| Velocidade de parsing | Mais rápido | Rápido | Mais lento |
| Aninhamento | Não | Sim | Sim |
| Schema | Sem padrão | JSON Schema | XSD, DTD |
| Comentários | Não | Não | Sim |
| Metadados | Não | Não | Sim (atributos) |
| Streaming | Linha por linha | SAX/streaming | SAX/StAX |
| Dados binários | Não | String Base64 | Base64 ou CDATA |
| Namespaces | Não | Não | Sim |
Quando Usar CSV
Melhor para:
- Dados de planilhas e exportações de banco de dados
- Análise de dados (pandas, R, Excel)
- Dados planos simples com colunas consistentes
- Compatibilidade máxima (toda ferramenta suporta CSV)
- Grandes conjuntos de dados onde o tamanho importa
Evite quando:
- Os dados têm estrutura aninhada ou hierárquica
- Múltiplos tipos de dados precisam ser preservados
- Valores de coluna contêm vírgulas, quebras de linha ou aspas (casos extremos)
Trabalhe com dados CSV usando nosso Editor CSV ou converta para JSON com nosso conversor CSV para JSON.
Quando Usar JSON
Melhor para:
- Comunicação de API web (respostas REST, GraphQL)
- Arquivos de configuração (package.json, tsconfig.json)
- Bancos de dados orientados a documentos (MongoDB, CouchDB)
- Ambientes de navegador (parsing JavaScript nativo)
- Dados com estrutura variável (alguns registros têm campos que outros não têm)
Evite quando:
- Os dados são puramente tabulares (CSV é mais simples e menor)
- Você precisa de recursos XML (namespaces, schemas, XSLT)
- Você precisa de comentários nos seus arquivos de dados (use YAML em vez disso)
Formate e valide JSON com nosso Formatador JSON.
Quando Usar XML
Melhor para:
- Sistemas corporativos (SOAP, XHTML, RSS, SVG)
- Marcação de documentos (conteúdo misto — texto com estrutura incorporada)
- Quando você precisa de atributos junto com elementos
- Requisitos fortes de validação de schema (XSD)
- Transformações XSLT
- Padrões específicos da indústria (saúde HL7, finanças XBRL)
Evite quando:
- Construindo APIs web modernas (JSON é o padrão)
- Os dados são tabulares (CSV é mais simples)
- Tamanho do arquivo e velocidade de parsing importam (JSON é mais leve)
Comparação de Tamanho
O mesmo conjunto de dados com 1000 registros:
| Formato | Tamanho do Arquivo | Tempo de Parsing (relativo) |
|---|---|---|
| CSV | 45 KB | 1x (referência) |
| JSON | 85 KB | 1,5x |
| XML | 140 KB | 3x |
A verbosidade do XML — tags de abertura, tags de fechamento e nomes de elementos repetidos para cada valor — aproximadamente triplica o tamanho em comparação com CSV.
Padrões de Migração
CSV para JSON
import csv, json
with open('data.csv') as f:
reader = csv.DictReader(f)
data = list(reader)
with open('data.json', 'w') as f:
json.dump(data, f, indent=2)
JSON para CSV
import csv, json
with open('data.json') as f:
data = json.load(f)
with open('data.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
XML para JSON
import xmltodict, json
with open('data.xml') as f:
data = xmltodict.parse(f.read())
with open('data.json', 'w') as f:
json.dump(data, f, indent=2)
O Cenário Atual
A tendência na última década tem sido clara: JSON substituiu amplamente o XML para APIs web e configuração. No entanto, CSV permanece dominante para troca de dados em análise e contextos de negócios, e XML persiste em sistemas corporativos e governamentais.
Alternativas mais novas:
- YAML: Configuração amigável para humanos (substitui tanto JSON quanto XML para configs)
- Protocol Buffers / MessagePack: Formatos binários para sistemas de alta performance
- Parquet / Arrow: Formatos colunares para análise de big data
Para uma comparação específica entre JSON e YAML, veja nosso guia YAML vs JSON.
FAQ
Posso converter entre esses formatos sem perder dados?
CSV para JSON é sem perdas para dados planos (embora tipos sejam perdidos — números viram strings no CSV). JSON para CSV perde estrutura hierárquica (objetos aninhados devem ser achatados). XML para JSON é majoritariamente sem perdas, mas atributos e conteúdo misto podem ser complicados. Sempre teste a conversão de ida e volta com seus dados específicos.
Qual formato devo usar para minha nova API?
JSON. É o padrão de fato para APIs web modernas, com suporte nativo em navegadores, excelentes ferramentas e o melhor equilíbrio entre legibilidade e tamanho. Use JSON Schema para validação. A única exceção é se você está integrando com sistemas corporativos legados que requerem XML.
Recursos Relacionados
- Editor CSV — Edite e limpe dados CSV
- Formatador JSON — Formate e valide JSON
- Guia de Conversão CSV para JSON — Conversão passo a passo