Pular para o conteúdo principal

JSON vs YAML

JSON é o formato de intercâmbio: estrito, sem comentários e compreendido por toda API e parser. YAML é o formato de configuração humana: escopo definido por indentação, receptivo a comentários e digitável à mão. Escolha JSON para programas conversando com programas e YAML para pessoas escrevendo para programas — e converta sem perdas em qualquer direção.

Só local

JSON vs YAML: explicação

Os dois formatos costumam ser apresentados como rivais, o que obscurece a verdade útil: eles resolvem problemas diferentes, e a maioria dos projetos reais usa os dois. O JSON venceu o intercâmbio de dados porque sua gramática cabe em um cartão de índice e porque um payload que um serviço emite pode ser consumido por outro sem nenhuma configuração compartilhada. O YAML venceu a configuração porque quem o edita são pessoas em um editor de texto, e pessoas querem comentários, listas legíveis e a liberdade de dispensar as aspas.

O custo dessa simpatia humana é uma spec que os próprios autores do YAML descrevem como complicada: a indentação carrega significado, o tipo de um escalar sem aspas é inferido (e a falha clássica é um valor como `no` virar silenciosamente o booleano false), e um arquivo pode fazer o parse com sucesso significando algo que seu autor nunca pretendeu. O rigor do JSON é exatamente o que o torna monótono — um número é um número, uma string é uma string, e nenhum editor pode reformatar seu arquivo em um documento diferente.

A comparação abaixo fica no nível em que os trade-offs realmente mordem: regras de sintaxe, comportamento de tipagem, comentários, tamanho e as ferramentas que cada formato pressupõe. Quando você precisar cruzar de um para o outro, há conversores honestos nas duas direções neste site — e, como tudo por aqui, eles rodam inteiramente no seu navegador.

Transformar a configuração em tabela para revisar em uma planilha é um passo comum, e o conversor de YAML para CSV faz isso sem você sair da aba.

Precisa da conversão exata que esta página compara? O conversor de YAML para JSON executa o ciclo de parse e emissão no seu navegador — nada é enviado.

Sintaxe: pontuação versus indentação

A gramática do JSON usa seis caracteres estruturais — colchetes, chaves, dois-pontos e vírgula — então o aninhamento de um documento fica visível na sua pontuação e um linter pode apontar o caractere exato que está errado. O YAML gasta seu orçamento de pontuação com legibilidade: aninhamento é indentação, listas são travessões, e pares chave/valor não precisam de separador além de dois-pontos e um espaço. O resultado é que um documento JSON de cinco linhas vira duas linhas de YAML, e um profundamente aninhado fica drasticamente mais curto — ao preço de uma classe inteira de erro que o JSON não tem: a falha do número errado de espaços, que alguns parsers reportam em uma linha distante do seu erro.

AspectoJSONYAML
Marcador de escopoChaves e colchetesIndentação (apenas espaços)
ComentáriosNenhum — removidos por design# até o fim da linha
AspasObrigatórias em toda stringOpcionais para a maioria dos escalares
Strings multilinhaApenas escapes \nEscalares em bloco (| e >)
Âncoras / reutilizaçãoNenhumÂncoras & e aliases *
Tamanho da gramáticaCabe em uma página (RFC 8259)Multiestágio, notoriamente complexa

Tipos: estrito versus inferido

Todo valor JSON se declara: strings usam aspas, números ficam nus, booleanos são exatamente true e false. O YAML infere. Um yes, no, on, off, true ou false sem aspas é um booleano; um 2026-09-19 sem aspas é uma data; e um valor como 1.20 pode virar silenciosamente o número 1.2 dependendo do leitor. A falha tem nome na comunidade — o problema da Noruega, por causa de códigos de país como NO que viram o booleano false — e é o argumento mais forte a favor de usar aspas defensivamente no YAML, mesmo quando o parser não exige.

O outro lado é deliberado: o YAML quer arquivos de configuração em que 8080 é lido como número de porta sem cerimônia. O JSON quer intercâmbio, onde emissor e consumidor precisam concordar em cada byte, e inferência é um bug. Cada formato otimiza para o leitor que espera.

Tamanho, desempenho e ferramentas

O YAML costuma ser o arquivo mais curto e o parse mais lento: escanear indentação, escalares em bloco multilinha e resolver âncoras custam mais do que a gramática de passagem única do JSON. Para configuração lida uma vez na inicialização, isso é irrelevante; para um formato que cruza a rede milhões de vezes por dia, é exatamente por isso que o YAML nunca desalojou o JSON. As ferramentas são a outra assimetria — toda linguagem traz um parser JSON na biblioteca padrão, enquanto parsers de YAML são de terceiros, com diferenças reais no que aceitam, razão pela qual este conversor documenta o subconjunto suportado em vez de prometer a spec completa.

  • Tamanho do payload: o YAML vence em arquivos escritos à mão; o JSON com minificação costuma vencer na transmissão, porque suas regras de aspas comprimem de forma previsível.
  • Mensagens de erro: parsers JSON apontam o caractere problemático; parsers YAML apontam a linha em que a indentação deixou de bater.
  • Interoperabilidade: JSON é o padrão em todo lugar — pipelines de logs, APIs HTTP, armazenamento do navegador. YAML é o padrão em Kubernetes, pipelines de CI e Ansible.
  • Ida e volta: JSON→YAML→JSON é sem perdas com um par compatível. YAML→JSON pode ter perdas no instante em que o arquivo usou recursos que o JSON não tem — âncoras, múltiplos documentos ou chaves que não são string.

Quando escolher cada um

A decisão raramente é sobre preferência e normalmente sobre o leitor. Escolha JSON quando um programa produz o documento e outro programa o consome: payloads de API, logs estruturados, estado armazenado, qualquer coisa que cruze um limite de confiança. Escolha YAML quando uma pessoa escreve e mantém o documento: pipelines de CI, manifests do Kubernetes, arquivos docker-compose, qualquer configuração em que quem revisa precise ler um diff e entendê-lo sem decifrar pontuação.

E a orientação se inverte com clareza: se você se pegar formatando JSON à mão com quinze níveis de aninhamento, esse arquivo provavelmente quer ser YAML. Se você se vê fazendo parse de YAML em tempo de execução dentro de um serviço, esse arquivo provavelmente quer ser JSON. Os conversores linkados abaixo tornam a travessia um passo de um clique, não um projeto de migração.

Perguntas frequentes

YAML é um superconjunto do JSON?

O YAML 1.2 tornou explicitamente a maioria dos documentos JSON válida como YAML — um arquivo JSON com as chaves intactas normalmente faz parse como YAML sem alterações. O inverso nunca é verdade: comentários, âncoras, chaves sem aspas e strings multilinha não têm representação em JSON. Por isso o caminho de migração é unidirecional por design, e ferramentas que prometem fidelidade total em YAML→JSON estão, discretamente, escolhendo um subconjunto.

Qual formato é mais rápido de fazer parse?

JSON, por uma margem ampla e consistente. Sua gramática é de passagem única e sem estado de indentação; os scanners do YAML rastreiam contexto de coluna, resolvem escalares em bloco e expandem âncoras. Para configuração lida na inicialização, a diferença é de milissegundos e irrelevante; para tráfego de alto volume entre máquinas, é uma das duas razões pelas quais o JSON domina a transmissão (a outra é o suporte universal nas bibliotecas padrão).

Por que sistemas de CI e o Kubernetes usam YAML em vez de JSON?

Porque seus documentos são escritos e revisados por pessoas. Os comentários do YAML permitem que um manifest se explique inline, a indentação mantém legíveis especificações de recursos profundas, e os diffs mostram a intenção com clareza. As mesmas propriedades que tornam o YAML arriscado para intercâmbio — inferência, sensibilidade à indentação — são forças para configuração mantida à mão.

O que é o problema da Noruega no YAML?

Vários parsers YAML tipam escalares sem aspas por inferência, então um código de país como NO (Noruega) faz parse como o booleano false, e off ou on também viram booleanos. A correção é colocar aspas em todo valor que deva continuar string. O JSON é imune por construção — sem aspas significa número ou booleano, com aspas significa string, sem etapa de inferência para errar.

Converter YAML para JSON pode perder dados?

Pode, em três casos documentados: múltiplos documentos em um arquivo (apenas o último sobrevive em um conversor de documento único), âncoras e aliases (precisam ser expandidos, o que duplica conteúdo) e chaves que não são string. Os conversores deste site rejeitam ou reportam claramente esses casos em vez de remodelar o documento em silêncio.

Devo indentar YAML com 2 ou 4 espaços?

Os dois são válidos — o YAML proíbe tabs, não uma contagem de espaços — mas 2 espaços é a convenção esmagadora nos ecossistemas Kubernetes, CI e Docker, e misturar larguras dentro de um arquivo é assim que erros de indentação nascem. Escolha 2, imponha com seu editor, e todo diff permanecerá legível.

Onde posso ler os padrões citados aqui?

  • RFC 8259 — O formato de intercâmbio de dados JavaScript Object Notation (JSON)
  • YAML 1.2 — Especificação do YAML, versão 1.2 (revisão 1.2.2)