JSON vs YAML: diferenças e casos de uso
JSON e YAML são os dois formatos de serialização textual mais utilizados para descrever dados estruturados: configuração de aplicação, payload de API, ficheiros de infraestrutura, manifests Kubernetes, pipelines CI/CD. Ambos representam as mesmas estruturas fundamentais (objetos, listas, escalares), mas com filosofias diferentes: o JSON privilegia a legibilidade pela máquina e a universalidade, o YAML aposta na legibilidade pelo humano e na concisão. Este artigo compara os dois formatos ponto por ponto para te ajudar a escolher.
O que é o JSON?
O JSON (JavaScript Object Notation) é um formato de serialização introduzido por Douglas Crockford no início dos anos 2000, derivado da sintaxe literal de objeto de JavaScript. Normalizado pelo RFC 8259 e pelo ECMA-404, é hoje o formato pivot da web: a quase totalidade das APIs REST, das bases NoSQL e das configurações frontend utiliza-o.
O JSON assenta em duas estruturas:
- Uma coleção ordenada de pares chave-valor (o objeto, entre chavetas)
- Uma lista ordenada de valores (o array, entre parênteses retos)
Os valores escalares são string, number, true,
false ou null. As cadeias têm obrigatoriamente de estar entre aspas
duplas. O JSON não suporta comentários.
O que é o YAML?
O YAML (YAML Ain't Markup Language) é um formato surgido em 2001, concebido desde o início para ser legível por um humano. A especificação atual é a YAML 1.2.2. A sua característica distintiva: usa a indentação para exprimir a hierarquia, à maneira do Python.
O YAML é um superconjunto do JSON desde a versão 1.2: qualquer documento JSON válido é um
documento YAML válido. Mas o YAML acrescenta muito: comentários, cadeias sem aspas,
multilinha, âncoras e aliases, tags para tipagem explícita, vários documentos no mesmo
ficheiro (---).
Sintaxe comparada
Aqui está a mesma estrutura expressa nos dois formatos.
JSON
{
"name": "cdrn",
"version": "1.14",
"tags": ["seo", "tools", "open-source"],
"author": {
"name": "Adrien",
"email": "contact@example.com"
},
"active": true,
"stars": null
}
YAML
# Configuracao do projeto
name: cdrn
version: "1.14"
tags:
- seo
- tools
- open-source
author:
name: Adrien
email: contact@example.com
active: true
stars: null
Sobre o mesmo conteúdo, o YAML ocupa praticamente o mesmo número de linhas mas evita as
chavetas, os parênteses retos, as vírgulas finais e as aspas na maior parte das cadeias. Os
comentários (linhas #) são permitidos.
Tipos suportados
O JSON tem 6 tipos: object, array, string,
number, boolean, null. Sem data nativa, sem binário,
sem distinção explícita entre inteiro e flutuante.
O YAML 1.2 conhece os mesmos que o JSON e acrescenta: timestamps ISO 8601, binários
(codificados em base64 através da tag !!binary), inteiros e floats distintos, o
infinito, NaN, e os tipos personalizados através de tags (!!str, !!int,
!!float...). O YAML 1.1 aceitava yes/no/on/off como booleanos: uma
armadilha clássica nos parsers antigos.
Desempenho e ecossistema
O JSON é tipicamente 3 a 10 vezes mais rápido a fazer parsing do que o YAML, e os seus parsers estão disponíveis em todo o lado (integrados no runtime da quase totalidade das linguagens). As bibliotecas YAML são mais pesadas porque suportam uma gramática mais rica (anchors, tags, multi-doc).
Do lado do ecossistema: o JSON domina as APIs HTTP, as bases NoSQL (MongoDB, CouchDB), os
ficheiros package.json, composer.json, tsconfig.json. O
YAML impôs-se para a configuração aplicacional e o infrastructure-as-code: Symfony, Spring
Boot, Rails, Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.
Tabela comparativa
| Critério | JSON | YAML |
|---|---|---|
| Legibilidade humana | Boa | Excelente |
| Legibilidade pela máquina | Excelente | Correta |
| Comentários | Não | Sim (#) |
| Indentação significativa | Não | Sim |
| Velocidade de parsing | Rápida | Mais lenta |
| Tipos ricos (data, binário) | Não | Sim |
| Anchors / aliases | Não | Sim |
| Caso de uso típico | API, armazenamento, troca de dados | Configuração, infra-as-code |
Casos de uso típicos
Escolher JSON quando
- Conceber uma API REST ou um endpoint webhook
- Armazenar dados numa base NoSQL ou numa cache
- Trocar dados entre frontend e backend
- O desempenho de parsing é crítico (alto débito, edge)
- Queres um formato universalmente suportado sem dependências
Escolher YAML quando
- Escreves uma configuração aplicacional editada à mão
- Precisas de comentários para documentar as opções
- Escreves Kubernetes, Docker Compose, GitHub Actions, Ansible
- Queres fatorizar blocos com âncoras e aliases
- A legibilidade prevalece sobre a rapidez de processamento
Recomendação
A regra simples: JSON para a máquina, YAML para o humano. Se o teu ficheiro é produzido ou consumido por um programa, opta por JSON. Se é escrito e relido à mão, opta por YAML. Muitos ecossistemas aceitam ambos: o Symfony lê YAML, JSON e XML para as suas configurações, o Kubernetes aceita ambos para os seus manifests. Na dúvida, vai de YAML para a configuração humana e JSON para os fluxos automatizados.
Podes testar a conversão de um formato para o outro com o nosso conversor JSON / YAML e formatar rapidamente um documento com o formatador JSON.
Perguntas frequentes
O YAML é mais lento do que o JSON?
Sim, regra geral, fazer parsing de um documento YAML consome várias vezes mais CPU do que fazer parsing do mesmo documento JSON, porque a gramática YAML é mais rica (indentação, tags, anchors). Na prática, a diferença é negligenciável para ficheiros de configuração. Torna-se notória quando se faz parsing de dezenas de milhares de documentos em ciclo.
É possível converter automaticamente YAML em JSON?
Sim: qualquer documento YAML pode ser convertido em JSON sem perda se se evitarem os tipos YAML específicos (timestamps, anchors). O inverso é ainda mais simples, sendo o JSON um subconjunto do YAML 1.2. O nosso conversor faz nos dois sentidos.
O JSON aceita comentários?
Não, o standard JSON proíbe-os. Existem dialetos (JSON5, JSONC), mas não são universalmente suportados. Se precisas de comentários, opta por YAML ou TOML.
Porque é que o Kubernetes usa YAML e não JSON?
Os manifests Kubernetes são escritos e relidos por humanos. O YAML oferece comentários, uma sintaxe menos ruidosa e a possibilidade de fatorizar através de anchors. A API Kubernetes também aceita JSON, mas o uso idiomático continua a ser o YAML.
O YAML é mesmo um superconjunto do JSON?
Sim desde o YAML 1.2: qualquer documento JSON válido é um documento YAML válido. Isso permite embutir JSON num ficheiro YAML sem o modificar, o que é prático para blocos gerados ou copiados-colados.