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 exatamente os mesmos dados — um registro de usuário, um arquivo de configuração, um payload de API — mas cada um otimiza para coisas diferentes. Escolher o errado para uma tarefa costuma aparecer depois, na forma de diffs de configuração ilegíveis ou de um parser que não expressa o que você precisa. Este guia compara os três lado a lado e dá uma regra prática concreta para cada um.

Os mesmos dados, de três maneiras

Aqui está um pequeno objeto representado nos três formatos. Compará-los lado a lado é a forma mais rápida de enxergar o que cada formato realmente troca.

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, usando indentação em vez de colchetes.
yaml
user:
  name: Ada Lovelace
  roles:
    - admin
    - editor
  active: true
XML — os mesmos dados, usando 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 é o padrão por um motivo: ele mapeia diretamente para as estruturas de dados que toda linguagem mainstream já possui (objetos/dicts e arrays/lists), então a análise converte para tipos nativos sem nenhuma ambiguidade. Ele não tem comentários, nem múltiplas formas de escrever o mesmo valor, nem sensibilidade a espaços em branco — o que parece limitador, mas é exatamente o que o torna rápido de analisar e seguro de gerar programaticamente.

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 em vez de pontuação. Isso é exatamente o que você quer para arquivos que uma pessoa edita diretamente e relê num diff — pipelines de CI (GitHub Actions, GitLab CI), manifests do Kubernetes e configuração de aplicação.

A contrapartida é que a flexibilidade do YAML também é sua maior armadilha: erros de indentação produzem silenciosamente uma estrutura diferente em vez de um erro de análise, e valores sem aspas como `no`, `yes`, `on` e datas podem ser convertidos automaticamente para 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 houver qualquer ambiguidade.

Onde o XML vence

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

É por isso que o XML persiste em domínios centrados em documentos — APIs SOAP, SVG, DOCX/XLSX (que são arquivos ZIP cheios de XML) e sistemas corporativos (bancos, saúde, governo) com pipelines validados por XSD que ninguém vai reescrever. Se seus dados são genuinamente em formato de documento (pense 'um parágrafo com um trecho em negrito no meio') em vez de registros, o XML muitas vezes ainda é a melhor escolha.

Convertendo entre formatos

Como os três descrevem o mesmo modelo de dados objeto/array/string/número/booleano/null (os atributos e o conteúdo misto do XML são a única coisa que não mapeia de forma limpa), converter entre JSON, YAML e XML costuma ser mecânico para qualquer dado em formato de registro. As ferramentas JSON to YAML, YAML to JSON, JSON to XML e XML to JSON do JSONForge fazem a conversão no navegador — útil quando você está migrando 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, ou seja, qualquer documento JSON válido também é YAML válido. Mas 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 é verdadeiro: nem todo YAML é 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 estruturalmente não consegue: 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 exatamente desses recursos, e é por isso que o XML não desapareceu mesmo com o JSON tendo vencido nas APIs REST típicas.
O que é o 'problema da Noruega' do YAML?
No YAML, `NO` sem aspas (o código de país da Noruega) é analisado como o booleano `false`, porque o YAML converte automaticamente `no`/`yes`/`on`/`off` sem aspas em booleanos. É uma pegadinha bem conhecida — sempre 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 ser uma string literal.

Experimente estas ferramentas

Artigos relacionados