Conversão de JSON para YAML: Um Guia Completo de Migração
JSON e YAML representam as mesmas estruturas de dados com sintaxe diferente. A conversão entre eles é direta na maioria dos casos, mas casos extremos envolvendo tipos, strings multilinhas e comentários exigem atenção. Este guia abrange o mapeamento completo entre os formatos.
Mapeamento de Sintaxe
Objetos / Mapeamentos
JSON:
{
"database": {
"host": "localhost",
"port": 5432,
"name": "myapp"
}
}
YAML:
database:
host: localhost
port: 5432
name: myapp
Arrays / Sequências
JSON:
{
"servers": ["web1", "web2", "web3"]
}
YAML:
servers:
- web1
- web2
- web3
Estruturas Aninhadas
JSON:
{
"services": [
{
"name": "api",
"ports": [8080, 8443],
"env": {"NODE_ENV": "production"}
}
]
}
YAML:
services:
- name: api
ports:
- 8080
- 8443
env:
NODE_ENV: production
Converta instantaneamente com nosso conversor de JSON para YAML.
Casos Extremos para Observar
1. Comentários
YAML suporta comentários; JSON não. Ao converter YAML para JSON, todos os comentários são perdidos:
# Este comentário será perdido no JSON
database:
host: localhost # Este também
2. Strings Multilinhas
YAML tem uma sintaxe poderosa para strings multilinhas que JSON não possui:
description: |
This is a multi-line
string that preserves
line breaks.
Em JSON, isso se torna:
{
"description": "This is a multi-line\nstring that preserves\nline breaks.\n"
}
3. Ambiguidade de Tipos
YAML detecta tipos automaticamente, o que pode causar problemas:
version: 1.0 # Float, não string "1.0"
port: 080 # Octal 64, não string "080"
country: NO # Booleano false, não string "NO"
Em JSON, os tipos são explícitos:
{
"version": "1.0",
"port": "080",
"country": "NO"
}
Ao converter JSON para YAML, adicione aspas em valores que podem ser mal interpretados.
4. Valores Nulos
Ambos suportam null, mas a sintaxe difere:
value: null # Explícito
value: ~ # Atalho YAML
value: # Valor vazio = null
{ "value": null }
5. Caracteres Especiais em Chaves
Chaves JSON podem conter qualquer caractere unicode. Chaves YAML com caracteres especiais precisam de aspas:
"content-type": "application/json" # Hífen precisa de aspas
simple_key: value # Underscore é permitido
Conversão pela Linha de Comando
Usando yq (processador YAML)
# JSON para YAML
yq -P input.json > output.yaml
# YAML para JSON
yq -o=json input.yaml > output.json
Usando Python
# JSON para YAML
python3 -c "import json, yaml, sys; print(yaml.dump(json.load(sys.stdin), default_flow_style=False))" < input.json > output.yaml
# YAML para JSON
python3 -c "import json, yaml, sys; print(json.dumps(yaml.safe_load(sys.stdin), indent=2))" < input.yaml > output.json
Usando jq + yq juntos
# Processar JSON, saída como YAML
cat config.json | jq '.database' | yq -P
Quando Usar Cada Formato
| Critério | JSON | YAML |
|---|---|---|
| Edição humana | Mais difícil (colchetes, vírgulas) | Mais fácil (sintaxe limpa) |
| Parsing por máquina | Mais rápido | Mais lento |
| Comentários | Não suportado | Suportado |
| Troca de dados | Padrão (APIs) | Raro |
| Configuração | Aceitável | Preferível |
| Rigidez | Estrito (bom) | Flexível (arriscado) |
Use JSON para: comunicação via API, armazenamento de dados, configurações geradas por máquina, ambientes de navegador.
Use YAML para: configurações editadas por humanos, Docker Compose, Kubernetes, pipelines de CI/CD, Ansible.
Para uma comparação mais aprofundada, veja nosso artigo YAML vs JSON.
FAQ
YAML é um superconjunto de JSON?
Sim, desde YAML 1.2 (2009), todo documento JSON válido também é YAML válido. Um parser YAML pode parsear JSON diretamente. No entanto, o inverso não é verdadeiro — recursos do YAML como comentários, âncoras e strings multilinhas não têm equivalente em JSON.
Qual é mais rápido para parsear, JSON ou YAML?
JSON é significativamente mais rápido de parsear em praticamente todas as linguagens. Parsers JSON são mais simples porque o formato tem menos sintaxe para lidar. Para arquivos de configuração carregados uma vez na inicialização, a diferença é insignificante. Para processamento de dados de alta vazão, JSON é a escolha óbvia.
Recursos Relacionados
- Conversor JSON para YAML — Converta entre formatos instantaneamente
- YAML vs JSON — Comparação detalhada entre formatos
- Tutorial de Sintaxe YAML — Aprenda YAML do zero