YAML vs JSON: qual é a diferença?

JSON e YAML descrevem o mesmo tipo de dado: objetos, listas, texto, números, true, false e null. O JSON é rígido e feito para programas, o YAML é flexível e feito para pessoas que escrevem configuração à mão. Este guia compara os dois lado a lado, mostra as regras do YAML que mudam valores sem avisar e explica como converter de um para o outro sem surpresas. O conversor abaixo roda no seu navegador, então você pode testar cada exemplo enquanto lê.

5 min de leitura

Os mesmos dados nos dois formatos

Aqui está uma configuração pequena em JSON: {"name": "shop", "port": 8080, "debug": false, "hosts": ["a.example.com", "b.example.com"]}. Em YAML, os mesmos dados são escritos com indentação em vez de chaves: name: shop numa linha, port: 8080 na seguinte, debug: false, e hosts: seguido de duas linhas indentadas que começam com hífen.

Os dois viram exatamente o mesmo objeto em qualquer linguagem de programação. A diferença está em como são escritos e no que mais cada formato permite.

JSONYAML
EstruturaChaves e colchetesIndentação, ou chaves se você preferir
TextoSempre entre aspas duplasAspas quase sempre opcionais
ComentáriosNão permitidosLinhas que começam com #
Texto em várias linhasSó com \n dentro de uma stringBlocos com | ou >
Reaproveitar partesNão é possívelÂncoras (&nome) e aliases (*nome)
Vários documentos num arquivoNãoSim, separados por uma linha de três hífens
Uso típicoAPIs, troca de dados, navegadoresConfiguração: Docker Compose, Kubernetes, CI

Experimente aqui: YAML para JSON

Abrir a página completa da ferramenta

Por que o YAML é agradável de escrever

O YAML precisa de menos caracteres. Não há chaves de fechamento para contar, vírgulas para esquecer entre os itens nem aspas na maior parte do texto. Os comentários permitem explicar por que uma configuração existe, e é por isso que ferramentas que as pessoas editam todo dia, como Docker Compose, Kubernetes, GitHub Actions e Ansible, escolheram o YAML.

As âncoras evitam repetição: você define um bloco uma vez com &defaults e reaproveita com *defaults, ou mescla esse bloco em outro com <<: *defaults e sobrescreve só algumas chaves. Os blocos de texto mantêm as quebras de linha, o que deixa scripts e mensagens longas legíveis dentro do arquivo.

Armadilhas do YAML que mudam os seus dados

A liberdade de deixar as aspas de fora tem um preço: o YAML adivinha o tipo de cada valor sem aspas, e o palpite nem sempre é o que você queria. A maioria desses problemas some quando o texto fica entre aspas.

  • O problema da Noruega: no YAML 1.1, que muitas ferramentas ainda usam, NO, no, yes, on e off são booleanos. Uma lista de códigos de país com NO para a Noruega vira false.
  • Números de versão: 1.10 é o número 1.1, e 3.0 pode virar 3. Escreva "1.10" para manter como texto.
  • Zeros à esquerda: CEPs e códigos de produto como 0123 podem virar números, e o YAML 1.1 lê esses valores como octal, então 0123 vira 83.
  • Horários: no YAML 1.1, 12:30 é um número em base 60, 750.
  • Dois pontos e cerquilha: um valor que contém ": " ou " #" termina antes da hora ou começa um comentário. Coloque esse texto entre aspas.
  • Tabulações: o YAML não permite tabulação na indentação, e uma chave indentada com um espaço a mais vai parar no bloco errado sem nenhum erro em alguns editores.

Por que o JSON é melhor para programas

O JSON tem um só jeito de escrever cada coisa e não adivinha nada: texto sempre fica entre aspas, então "NO" continua texto e 1.10 é claramente um número. Os parsers são pequenos, rápidos e existem em todas as linguagens, e os navegadores leem JSON nativamente. Isso faz do JSON a escolha mais segura sempre que os dados são produzidos e lidos por software, como respostas de API, logs, caches e arquivos de dados.

A falta de comentários é a reclamação mais comum. Algumas ferramentas aceitam JSON com comentários (muitas vezes chamado de JSONC), mas os parsers padrão rejeitam, então não é um bom formato para arquivos que outros programas precisam ler.

Como converter entre YAML e JSON com segurança

O YAML 1.2 foi projetado como um superconjunto do JSON, então quase todo documento JSON também é YAML válido. A direção contrária precisa de um parser de verdade, porque os recursos do YAML precisam ser resolvidos: âncoras e merge keys são expandidas, blocos de texto viram uma string com \n e vários documentos viram uma lista. Os comentários não podem ser levados junto, já que o JSON não tem lugar para eles.

Quando você converte JSON para YAML, todo valor que um leitor de YAML poderia interpretar errado precisa ficar entre aspas. O conversor desta página confere cada texto pelas regras do YAML 1.1 e do YAML 1.2 e só coloca aspas quando é necessário, então yes, NO, 0123 e 1.10 voltam sem mudança. Converter o resultado de volta com Inverter é um jeito rápido de provar que nada mudou.

Qual usar?

  • Use YAML para configuração que as pessoas escrevem e revisam à mão, principalmente quando os comentários ajudam.
  • Use JSON para dados que programas trocam, guardam ou enviam pela rede.
  • Use JSON quando o arquivo é gerado por código, mesmo que uma pessoa leia depois.
  • Se uma ferramenta aceita os dois, como muitas aceitam, mantenha o formato que a sua equipe já usa: a consistência importa mais que as pequenas diferenças.
  • Se ficar com o YAML, coloque entre aspas os textos que parecem números, datas ou yes/no, e confira os arquivos com um parser antes do deploy.

Passo a passo

  1. Escolha a direçãoSelecione YAML > JSON ou JSON > YAML no topo do conversor.
  2. Cole o seu arquivoCole o conteúdo ou abra o arquivo. Exemplo mostra um arquivo YAML com uma âncora e uma merge key.
  3. Leia as mensagensSe o YAML tiver um erro, a mensagem mostra a linha e a coluna. As observações listam tags desconhecidas e comentários que ficaram de fora.
  4. Confira a ida e voltaClique em Inverter para converter o resultado de volta e comparar com o original.

Perguntas frequentes

JSON é YAML válido?

Quase sempre. O YAML 1.2 foi projetado como superconjunto do JSON, então um parser YAML 1.2 lê arquivos JSON. Parsers antigos de YAML 1.1 têm algumas diferenças, por exemplo com certas sequências de escape.

O YAML é mais lento que o JSON?

Ler YAML dá mais trabalho por causa das muitas regras, mas em arquivos de configuração a diferença não aparece. Para grandes volumes de dados e APIs, o JSON é mais rápido e mais simples.

Por que meu arquivo YAML diz yes, mas o programa vê true?

O programa usa um parser YAML 1.1, em que yes, no, on e off são booleanos. Coloque o valor entre aspas para manter como texto.

Dá para manter os comentários ao converter YAML para JSON?

Não. O JSON não tem comentários, então eles são descartados. Mantenha o arquivo YAML como fonte se os comentários forem importantes.

Meus arquivos são enviados quando eu converto aqui?

Não. A conversão acontece toda no seu navegador, o que importa para arquivos de configuração com senhas ou chaves.