Skip to content
jsonforge.app
Voltar ao blog
Guia9 min de leitura

JSON vs XML vs YAML: como escolher o formato de dados certo

JSON, XML e YAML conseguem descrever os mesmos dados, seja um registro de usuário, um arquivo de configuração ou um payload de API, mas cada um otimiza coisas diferentes. Uma escolha errada cobra o preço depois, em diffs de configuração ilegíveis ou num parser que não expressa o que você precisa. Este guia compara os três lado a lado e dá uma regra prática para cada um.

Os mesmos dados, de três maneiras

Abaixo, um pequeno objeto escrito nos três formatos. Comparando-os lado a lado, você vê o que cada formato sacrifica.

JSON: colchetes e aspas explícitos, sem ambiguidade sobre a estrutura.
json
{
  "user": {
    "name": "Ada Lovelace",
    "roles": ["admin", "editor"],
    "active": true
  }
}
YAML: os mesmos dados, com indentação no lugar de colchetes.
yaml
user:
  name: Ada Lovelace
  roles:
    - admin
    - editor
  active: true
XML: os mesmos dados, com tags de abertura/fechamento e atributos.
xml
<user active="true">
  <name>Ada Lovelace</name>
  <roles>
    <role>admin</role>
    <role>editor</role>
  </roles>
</user>

Três campos, três quantidades muito diferentes de pontuação. Essa diferença é a história toda: o JSON é o mais amigável para máquinas, o YAML é o mais amigável para escrever à mão, e o XML é o mais expressivo quando o próprio documento precisa de estrutura que vai além de simples dados chave/valor.

Onde o JSON vence

O JSON mapeia diretamente para as estruturas de dados que toda linguagem popular já possui (objetos/dicts e arrays/lists), então a análise gera tipos nativos sem ambiguidade. Ele não tem comentários, tem uma só forma de escrever cada valor e não é sensível a espaços em branco. Esses limites o tornam rápido de analisar e seguro de gerar por código.

Use JSON para qualquer comunicação máquina-a-máquina: payloads de APIs REST e GraphQL, dados passados entre serviços, qualquer coisa armazenada em um banco de documentos (MongoDB, o JSONB do PostgreSQL) e qualquer configuração que seja principalmente lida e escrita por código, e não editada à mão.

Onde o YAML vence

O YAML é um superconjunto estrito do modelo de dados do JSON com uma sintaxe muito mais amigável para humanos: sem colchetes de fechamento para contar, comentários com # e indentação no lugar de pontuação. É isso que você quer para arquivos que uma pessoa edita e relê num diff: pipelines de CI (GitHub Actions, GitLab CI), manifests do Kubernetes e configuração de aplicação.

Essa flexibilidade é também a maior armadilha do YAML. Um erro de indentação produz uma estrutura diferente sem nenhum erro de análise, e o parser pode converter valores sem aspas como `no`, `yes`, `on` e datas em booleanos ou timestamps que você não pretendia (o infame 'problema da Noruega', em que o código de país NO vira o booleano false). Coloque aspas nas strings sempre que um valor puder ser lido de dois jeitos.

Onde o XML vence

O XML parece um legado pesado ao lado do JSON, mas faz coisas que nem JSON nem YAML conseguem: atributos junto ao conteúdo do elemento, conteúdo misto (texto e elementos intercalados, como no HTML), namespaces para combinar vocabulários de fontes diferentes, e validação madura por schema (XSD) e transformação (XSLT) com ferramentas uma década mais velhas que o JSON.

O XML persiste em domínios centrados em documentos: APIs SOAP, SVG, DOCX/XLSX (arquivos ZIP cheios de XML) e sistemas corporativos de bancos, saúde e governo, com pipelines validados por XSD que ninguém vai reescrever. Se seus dados têm formato de documento ('um parágrafo com um trecho em negrito no meio') em vez de registro, o XML costuma se encaixar melhor.

Convertendo entre formatos

Os três descrevem o mesmo modelo de dados objeto/array/string/número/booleano/null (só os atributos e o conteúdo misto do XML não mapeiam de forma limpa), então converter dados em formato de registro entre JSON, YAML e XML é mecânico. As ferramentas JSON to YAML, YAML to JSON, JSON to XML e XML to JSON do JSONForge convertem no navegador, o que ajuda quando você migra o formato de um arquivo de configuração ou precisa entregar um export em JSON para um colega que só usa YAML.

FAQ

YAML é apenas JSON com sintaxe diferente?
Quase. O YAML 1.2 é um superconjunto do JSON, então qualquer documento JSON válido também é YAML válido. O YAML adiciona recursos que o JSON não tem (comentários, anchors/referências, arquivos multi-documento) e suas próprias peculiaridades de análise (conversão implícita de tipos), então o inverso não vale: muito YAML não é JSON válido.
Por que Kubernetes e ferramentas de CI usam YAML em vez de JSON?
Porque esses arquivos são escritos e revisados à mão constantemente. A ausência de colchetes e o suporte a comentários tornam o YAML muito mais agradável de ler e de comparar num pull request do que o JSON equivalente, mesmo que o JSON fosse analisado de forma idêntica.
Por que o XML ainda existe se o JSON é mais simples?
O XML suporta coisas que o JSON não consegue expressar: atributos em elementos, conteúdo misto de texto/elementos, namespaces e validação de schema via XSD. Formatos construídos sobre XML (SVG, DOCX, XLSX, SOAP) dependem desses recursos, e por isso o XML continua aqui mesmo com o JSON tendo vencido nas APIs REST típicas.
O que é o 'problema da Noruega' do YAML?
No YAML, o parser lê `NO` sem aspas (o código de país da Noruega) como o booleano `false`, porque o YAML converte `no`/`yes`/`on`/`off` sem aspas em booleanos. Coloque aspas em códigos de país, strings de versão e qualquer coisa que pareça um booleano ou número mas deva continuar como string literal.

Experimente estas ferramentas

Artigos relacionados