YAML

1 tools

Formatos de serialização de dados

A serialização de dados é o processo de converter dados estruturados em um formato que pode ser armazenado ou transmitido e posteriormente reconstruído.

JSON, YAML, TOML e XML são os quatro formatos de serialização baseados em texto dominantes no desenvolvimento de software.

JSON e YAML lado a lado

JSON e YAML representam o mesmo modelo de dados. YAML é um superconjunto estrito de JSON — qualquer documento JSON válido também é YAML válido.

JSON
{
  "server": {
    "host": "localhost",
    "port": 8080,
    "debug": true
  },
  "database": {
    "url": "postgres://localhost/mydb",
    "pool": 10
  }
}
YAML
server:
  host: localhost
  port: 8080
  debug: true
database:
  url: postgres://localhost/mydb
  pool: 10

YAML usa recuo em vez de chaves e colchetes, e omite aspas na maioria dos valores de string. Isso o torna mais compacto e legível para arquivos editados por humanos.

Comparação de formatos

FormatoLegibilidadeComentáriosArraysMelhor para
JSON★★★☆☆Sem comentáriosNativoAPIs, troca de dados
YAML★★★★★Sim (#)NativoArquivos de config, IaC
TOML★★★★☆Sim (#)NativoConfig de app (Rust, Python)
XML★★☆☆☆Sim (<!-- -->)Elementos repetidosDocumentos, SOAP, SVG

Armadilhas do YAML

O YAML é poderoso mas tem casos extremos bem conhecidos que surpreendem os desenvolvedores:

O problema da Noruega

O valor bare 'NO' é interpretado como booleano false no YAML 1.1. Códigos de país como NO (Noruega), OFF, FALSE, N são todos analisados como false. Sempre coloque strings ambíguas entre aspas.

Sensibilidade ao recuo

O YAML usa recuo para definir estrutura. Um espaço extra ou um caractere de tabulação pode mudar completamente o significado do documento. Tabulações são proibidas no YAML — apenas espaços.

Coerção de tipo implícita

Valores que parecem números, booleanos ou null são automaticamente convertidos. Use aspas para valores que você quer manter como strings.

Tabulações são proibidas

A especificação YAML proíbe explicitamente caracteres de tabulação para recuo. Configure seu editor para usar espaços em arquivos YAML.

Modos de string multilinha

O YAML tem dois indicadores de string multilinha: | (bloco literal, preserva quebras de linha) e > (bloco dobrado, converte quebras de linha em espaços).

Loops de âncora/alias

Âncoras YAML (&) e aliases (*) permitem reutilização de nós, mas podem criar referências circulares que causam loops infinitos em analisadores ingênuos.

Recursos exclusivos do YAML

Comentários

O YAML suporta comentários com o caractere #. Esta é uma das maiores vantagens práticas sobre o JSON para arquivos de configuração.

Âncoras e aliases

O YAML permite definir um nó uma vez com &nome-da-âncora e reutilizá-lo em qualquer lugar com *nome-da-âncora.

Strings multilinha

O YAML suporta escalares de bloco com dois modos: o bloco literal (|) preserva as quebras de linha; o bloco dobrado (>) converte quebras de linha em espaços.

Quando você precisa converter

Configuração de pipeline CI/CD

GitHub Actions, GitLab CI e CircleCI usam YAML nativamente. Ao gerar configurações de pipeline programaticamente, muitas vezes é mais fácil construir um objeto JSON e converter para YAML.

Manifestos do Kubernetes

Os recursos do Kubernetes são definidos em YAML, mas algumas ferramentas produzem JSON. Converter entre formatos permite inspecionar respostas de API.

Processamento de respostas de API

APIs REST retornam JSON. Ao alimentar esses dados em sistemas de configuração baseados em YAML, um conversor une a lacuna.

Migração de configuração

Migrar de uma ferramenta para outra geralmente significa converter seu formato de configuração.

Fluxo de validação de esquema

As ferramentas de JSON Schema são mais maduras. Um padrão comum é criar config em YAML para legibilidade, converter para JSON para validação.

Intercâmbio de dados com APIs

Ferramentas internas podem consumir configurações YAML enquanto APIs externas requerem JSON.

Perguntas frequentes

O YAML é um superconjunto do JSON?

Sim. O YAML 1.2 é um superconjunto estrito do JSON — qualquer documento JSON válido também é YAML válido.

Por que escolheria YAML em vez de JSON para arquivos de configuração?

O YAML suporta comentários, que o JSON não tem. O YAML também é mais compacto para estruturas profundamente aninhadas.

O que é TOML e quando devo usá-lo?

TOML é projetado para arquivos de configuração com uma sintaxe clara, semelhante a INI, com tipos explícitos. É o padrão para Rust (Cargo.toml) e Python (pyproject.toml).

A conversão de JSON para YAML perde informações?

Raramente. O JSON preserva a ordem das chaves na maioria dos analisadores. O YAML suporta âncoras e tags que não têm equivalente em JSON.

O que causa 'undefined' aparecer na saída JSON?

JSON.stringify converte valores undefined para null em arrays e os omite de objetos.

Posso usar JSON em um arquivo YAML?

Sim. Como o YAML é um superconjunto do JSON, você pode incorporar sintaxe JSON diretamente em um documento YAML.