Converta entre YAML e JSON instantaneamente. Validação em tempo real, formatação e download.
YAML (YAML Ain't Markup Language) é uma linguagem de serialização de dados legível por humanos. Seu nome já indica a filosofia: não é uma linguagem de marcação complicada, mas sim um formato limpo baseado em indentação (espaços) para representar listas, dicionários e valores escalares.
O YAML se tornou o padrão absoluto no ecossistema Cloud Native: Docker Compose, Kubernetes, Ansible, GitHub Actions, GitLab CI, Helm Charts — todos usam YAML para arquivos de configuração. É mais fácil de ler e escrever que JSON (sem chaves, vírgulas ou aspas obrigatórias) e mais poderoso que INI ou .env.
YAML vs JSON:
- JSON é o formato da web (APIs REST). É verboso (muitas chaves, vírgulas) e estrito.
- YAML é o formato da infraestrutura (DevOps). É limpo, suporta comentários (#) e âncoras (&alias).
| Conceito | JSON | YAML |
|---|---|---|
| Objeto (Map) | { "nome": "Ana", "idade": 30 } | nome: Ana |
| Lista (Array) | ["Maçã", "Banana"] | - Maçã |
| String | "texto" | texto (aspas opcionais, exceto com caracteres especiais) |
| Número | 42 / 3.14 | 42 / 3.14 |
| Booleano | true / false | true / false (ou yes / no, on / off) |
| Nulo | null | null ou ~ |
| Comentário | Não suporta | # Isto é um comentário |
A principal fonte de erros em YAML é a indentação incorreta. Diferente do Python (que aceita tabs ou espaços), o YAML exige espaços (nunca use Tab!). A indentação define a hierarquia (pai/filho).
pessoa:
nome: Ana
idade: 30
pessoa:
→ nome: Ana
idade: 30Configure seu editor! No VS Code, adicione no settings.json: "[yaml]": { "editor.insertSpaces": true, "editor.tabSize": 2 }. Isso salva vidas no Kubernetes.
| Ferramenta | Arquivo Típico | Como o Conversor Ajuda |
|---|---|---|
| Docker Compose | docker-compose.yml | Validar se a estrutura está correta antes do docker compose up. |
| Kubernetes | deployment.yaml, service.yaml | Converter um JSON de uma API do K8s em YAML para aplicar com kubectl apply -f. |
| Ansible | playbook.yml, vars/main.yml | Verificar a sintaxe de variáveis complexas. |
| GitHub Actions | .github/workflows/ci.yml | Validar a workflow antes de dar push. |
| Spring Boot (Java) | application.yml | Converter propriedades JSON de legado para YAML. |
Uma feature exclusiva do YAML é a capacidade de conter múltiplos documentos em um único arquivo, separados por ---. Isso é muito usado em Kubernetes para definir Deployment + Service no mesmo arquivo.
apiVersion: v1
kind: Pod
metadata:
name: nginx
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
[ { "apiVersion": "v1", ... }, { "apiVersion": "v1", ... } ]
python -c "import sys, yaml, json; print(json.dumps(yaml.safe_load(sys.stdin), indent=2))" < arquivo.yamlyq eval -o=json arquivo.yamlnome:Ana. Certo: nome: Ana.: no meio de uma string não quotada). Use aspas: mensagem: "Hora: 10:00".True vs true). No YAML, é minúsculo.defaults: &defaults
timeout: 30
service1:
<<: *defaults
port: 8080defaults em service1. Muito usado em Docker Compose e GitLab CI.
apiVersion é válido para o recurso K8s), use o kubectl apply --dry-run=client -f arquivo.yaml ou a extensão oficial do Kubernetes no VS Code.
js-yaml. Seus arquivos YAML/JSON NUNCA são enviados para nossos servidores. Você pode desconectar da internet e a ferramenta continuará funcionando perfeitamente. Ideal para validar secrets do Kubernetes.
Cada formato de serialização de dados tem suas próprias características e casos de uso ideais. Enquanto o JSON domina o ecossistema de APIs REST pela sua simplicidade e suporte universal, o YAML é preferido para arquivos de configuração por sua legibilidade humana. Já o TOML (Tom's Obvious Minimal Language) ganha espaço em ferramentas modernas como Rust (Cargo.toml), Python (pyproject.toml) e Hugo.
| Característica | YAML | JSON | TOML |
|---|---|---|---|
| Comentários | Sim (#) | Não | Sim (#) |
| Tipos de dados | Strings, números, booleanos, null, datas, binário | String, number, boolean, null, array, object | String, inteiro, float, booleano, datetime, array, tabela |
| Legibilidade humana | Alta (indentação) | Média (chaves e vírgulas) | Alta (sem indentação obrigatória) |
| Uso principal | CI/CD, Kubernetes, Ansible, Docker Compose | APIs REST, armazenamento, comunicação entre serviços | Configuração de ferramentas (Rust, Python, Hugo) |
| Tamanho médio do arquivo | Menor (sem chaves/vírgulas) | Médio | Similar ao YAML |
| Suporte a referências | Sim (anchors & aliases: &anchor, *ref) | Não (nativo) | Não |
Para ilustrar as diferenças práticas, compare a definição de um mesmo contêiner Docker nos dois formatos. Em YAML (Docker Compose), a configuração é legível e concisa: serviços como web e db são definidos com indentação simples, portas mapeadas como "8080:80" e variáveis de ambiente listadas diretamente. Em JSON equivalente, o mesmo conteúdo exige chaves, vírgulas e aspas duplas em todas as chaves, tornando o arquivo consideravelmente mais verboso e propenso a erros de digitação.
O GitHub Actions usa exclusivamente YAML para seus workflows, permitindo que desenvolvedores definam pipelines de CI/CD com blocos como on: push, jobs: e steps:. O Kubernetes aceita tanto YAML quanto JSON para seus manifestos (Deployments, Services, ConfigMaps), mas a comunidade adota YAML como padrão por legibilidade. No Kubernetes, os campos obrigatórios são: apiVersion, kind, metadata e spec.
Para evitar erros sutis e garantir a portabilidade dos seus arquivos YAML entre diferentes ferramentas e versões de parsers, siga estas boas práticas consolidadas pela comunidade DevOps:
1. Sempre use aspas para strings ambíguas: Valores como "true", "false", "yes", "no", "null", números com zeros à esquerda (como "007") e datas (como "2024-01-01") devem ser colocados entre aspas quando representam texto, não tipos especiais. 2. Defina a versão do documento: Inicie arquivos YAML críticos com %YAML 1.2 para garantir comportamento previsível, especialmente com booleanos e números octais. 3. Use um linter: Ferramentas como yamllint (Python) e plugins de IDE como YAML Language Support (VS Code) detectam erros antes da execução. 4. Prefira listas explícitas: Em vez de separar itens por vírgula em uma string, use a sintaxe de lista YAML com traços (-) para cada item, tornando a estrutura evidente e fácil de editar.