CSV vs JSON vs XML: Escolher o Formato de Dados Certo
Cada troca de dados requer escolher 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 na análise, payloads inchados e tempo de desenvolvimento desperdiçado. Este guia ajuda-o a escolher a ferramenta certa para o trabalho.
Visão Geral dos Formatos
CSV (Comma-Separated Values)
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: O 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: O maior (etiquetas verbosas)
Comparação Detalhada
| Característica | CSV | JSON | XML |
|---|---|---|---|
| Legibilidade | Elevada (tabular) | Elevada | Baixa (verboso) |
| Tamanho do ficheiro | Menor | Médio | Maior |
| Velocidade de análise | Mais rápida | Rápida | Mais lenta |
| Aninhamento | Não | Sim | Sim |
| Esquema | Sem padrão | JSON Schema | XSD, DTD |
| Comentários | Não | Não | Sim |
| Metadados | Não | Não | Sim (atributos) |
| Streaming | Linha a linha | SAX/streaming | SAX/StAX |
| Dados binários | Não | String Base64 | Base64 ou CDATA |
| Namespaces | Não | Não | Sim |
Quando Utilizar CSV
Melhor para:
- Dados de folhas de cálculo e exportações de bases de dados
- Análise de dados (pandas, R, Excel)
- Dados planos simples com colunas consistentes
- Compatibilidade máxima (todas as ferramentas suportam CSV)
- Conjuntos de dados grandes onde o tamanho importa
Evitar quando:
- Os dados têm estrutura aninhada ou hierárquica
- É necessário preservar múltiplos tipos de dados
- Os valores das colunas contêm vírgulas, quebras de linha ou aspas (casos extremos)
Trabalhe com dados CSV utilizando o nosso Editor de CSV ou converta para JSON com o nosso conversor CSV para JSON.
Quando Utilizar JSON
Melhor para:
- Comunicação de APIs web (respostas REST, GraphQL)
- Ficheiros de configuração (package.json, tsconfig.json)
- Bases de dados orientadas a documentos (MongoDB, CouchDB)
- Ambientes de navegador (análise nativa em JavaScript)
- Dados com estrutura variável (alguns registos têm campos que outros não têm)
Evitar quando:
- Os dados são puramente tabulares (CSV é mais simples e menor)
- Precisa de funcionalidades XML (namespaces, esquemas, XSLT)
- Precisa de comentários nos seus ficheiros de dados (utilize YAML em vez disso)
Formate e valide JSON com o nosso Formatador de JSON.
Quando Utilizar XML
Melhor para:
- Sistemas empresariais (SOAP, XHTML, RSS, SVG)
- Marcação de documentos (conteúdo misto — texto com estrutura incorporada)
- Quando precisa de atributos ao lado de elementos
- Requisitos fortes de validação de esquema (XSD)
- Transformações XSLT
- Normas específicas da indústria (saúde HL7, finanças XBRL)
Evitar quando:
- A construir APIs web modernas (JSON é o padrão)
- Os dados são tabulares (CSV é mais simples)
- O tamanho do ficheiro e a velocidade de análise importam (JSON é mais leve)
Comparação de Tamanho
O mesmo conjunto de dados com 1000 registos:
| Formato | Tamanho do Ficheiro | Tempo de Análise (relativo) |
|---|---|---|
| CSV | 45 KB | 1x (referência) |
| JSON | 85 KB | 1,5x |
| XML | 140 KB | 3x |
A verbosidade do XML — etiquetas de abertura, etiquetas de fecho e nomes de elementos repetidos para cada valor — triplica aproximadamente o tamanho em comparação com o 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 Panorama Moderno
A tendência da última década tem sido clara: o JSON substituiu em grande parte o XML para APIs web e configuração. No entanto, o CSV continua a ser dominante para troca de dados em contextos de análise e negócios, e o XML persiste em sistemas empresariais e governamentais.
Alternativas mais recentes:
- YAML: Configuração amigável para humanos (substitui tanto JSON como XML para configurações)
- Protocol Buffers / MessagePack: Formatos binários para sistemas de elevado desempenho
- Parquet / Arrow: Formatos colunares para análise de big data
Para uma comparação específica entre JSON e YAML, consulte o nosso guia YAML vs JSON.
FAQ
Posso converter entre estes formatos sem perder dados?
A conversão de CSV para JSON é sem perdas para dados planos (embora os tipos se percam — números tornam-se strings em CSV). A conversão de JSON para CSV perde a estrutura hierárquica (objetos aninhados devem ser achatados). A conversão de XML para JSON é maioritariamente sem perdas, mas atributos e conteúdo misto podem ser complicados. Teste sempre a conversão de ida e volta com os seus dados específicos.
Que formato devo utilizar para a minha nova API?
JSON. É o padrão de facto para APIs web modernas, com suporte nativo no navegador, ferramentas excelentes e o melhor equilíbrio entre legibilidade e tamanho. Utilize JSON Schema para validação. A única exceção é se estiver a integrar com sistemas empresariais legados que requerem XML.
Recursos Relacionados
- Editor de CSV — Edite e limpe dados CSV
- Formatador de JSON — Formate e valide JSON
- Guia de Conversão CSV para JSON — Conversão passo a passo