Artigo do guia · 6 min de leitura
YAML vs JSON: quando usar qual
YAML vs JSON é uma escolha entre dois formatos de serialização baseados na mesma ideia básica: aninhar pares chave-valor e listas. As diferenças que importam na prática são sobre quem lê o arquivo: humanos ou máquinas.
Atualizado
YAML vs JSON: a versão curta
JSON é um formato de intercâmbio de dados: estrito, inequívoco e qualquer linguagem pode analisá-lo nativamente. YAML é um formato de configuração: aceita comentários e strings multilinhas e foi projetado para ser editado por pessoas em pull requests. Use JSON na conexão, YAML em arquivos mantidos por humanos — e converta entre eles quando um limite exigir.
O que realmente difere
Comentários
YAML tem comentários; JSON não. Nos arquivos de configuração isso é decisivo — a razão pela qual você sabe por que um tempo limite está definido como 3000 geralmente é o comentário acima dele. Quando você converte YAML em JSON, os comentários são eliminados, e é por isso que JSON é frequentemente tratado como um artefato de construção, e não como a fonte da verdade.
Sintaxe e ruído
# YAML
service:
name: checkout
replicas: 3
ports: [8080, 9090]
// JSON — same data
{
"service": {
"name": "checkout",
"replicas": 3,
"ports": [8080, 9090]
}
}
YAML remove colchetes, aspas e vírgulas em troca da sensibilidade ao recuo. Esse é o negócio que todo usuário YAML conhece: menos caracteres, mais maneiras de errar sutilmente os espaços em branco.
Tipos e armadilhas
- JSON possui um tipo numérico; YAML distingue ints, floats e muito mais — e YAML 1.1 analisa o famoso código de país NO como o booleano falso, e 1.10 como um número que perde seu zero à direita, a menos que seja citado.
- YAML suporta âncoras e aliases (&defaults / *defaults) para reutilização; JSON não tem equivalente, então os blocos compartilhados devem ser duplicados ou gerados.
- YAML suporta arquivos com vários documentos (--- separadores); JSON é um documento por arquivo. Os conversores normalmente transformam documentos em uma matriz.
- JSON requer chaves e strings entre aspas duplas; YAML cita apenas quando necessário, o que significa que uma string descuidada pode silenciosamente se tornar um número ou booleano.
Onde cada formato ganha
- APIs e formatos de conexão: JSON. Analisadores universais, ambiguidade previsível, fácil de transmitir (JSON Linhas).
- Kubernetes, CI/CD, Docker Compose, Ansible, Helm: YAML, porque esses ecossistemas se padronizaram nele e suportam comentários.
- Configuração do fornecedor que você gera programaticamente: JSON — algoritmos a produzem sem ansiedade de indentação.
- Documentos que um colega júnior editará manualmente: YAML, com comentários explicando o porquê.
Convertendo com segurança
- Conheça seus arquivos de vários documentos. Um conjunto de manifestos k8s separado por --- deve se tornar um array JSON, não apenas o primeiro documento. Use um conversor que informe quantos documentos foram encontrados.
- Cite os números que são identificadores. "1.10" é uma versão; 1.10 é um flutuador. Habilite aspas forçadas ao converter para YAML se os valores forem strings que parecem numéricas.
- Observe os comentários desaparecendo. Converter para JSON tem perdas por definição; se os comentários forem importantes, mantenha YAML como fonte e gere JSON somente no momento da compilação.
- Valide com erros precisos. Erros de indentação produzem mensagens enganosas em algumas ferramentas; certifique-se de que o seu mostre linha e coluna.
Experimente: cole qualquer YAML no conversor de YAML para JSON — o suporte a vários documentos e linhas de erro precisas estão integrados e nada é carregado.
Perguntas comuns
YAML é um superconjunto de JSON?
YAML 1.2 é projetado como um superconjunto – JSON válido geralmente é válido YAML. Mas YAML 1.1 (ainda disponível) difere em alguns casos extremos, e guias, chaves duplicadas e certas strings são analisadas de maneira diferente entre os mecanismos. Trate “é tecnicamente válido YAML” como uma curiosidade, não como uma estratégia de migração.
Qual é mais rápido de analisar?
JSON analisadores são geralmente mais rápidos e simples porque a gramática é menor; a análise JSON nativa existe em todos os tempos de execução. Para arquivos de configuração, a diferença é irrelevante – você analisa uma vez na inicialização.