Converter entre JSON e YAML
- Painel
- Documentação
- API
Para que serve este conversor JSON / YAML?
Esta ferramenta transforma um documento YAML em JSON e vice-versa, preservando a estrutura dos dados (objetos, arrays, tipos escalares). A conversão JSON para YAML, ou YAML para JSON, é uma operação comum no desenvolvimento: gera-se um ficheiro OpenAPI YAML a partir de uma spec JSON, converte-se a saída de uma API REST em YAML para a colocar num repositório de configuração, traduz-se um manifesto Kubernetes YAML em JSON para o passar a kubectl --dry-run=client -o json, ou alinha-se um workflow GitHub Actions com um esquema JSON. De forma mais ampla, é a ponte entre o mundo do intercâmbio de dados (JSON) e o da configuração editável à mão (YAML).
YAML vs JSON: comparação direta
JSON e YAML respondem a necessidades próximas mas casos de uso diferentes. A tabela seguinte resume as diferenças técnicas principais, úteis para escolher entre os dois conforme o contexto.
| Critério | JSON | YAML |
|---|---|---|
| Legibilidade humana | Média (chavetas, aspas em todo o lado) | Forte (indentação, pouca pontuação) |
| Verbosidade | Mais verboso | Mais conciso |
| Comentários | Não suportados | Suportados (# comentário) |
| Multidocumentos num único ficheiro | Não | Sim, através do separador --- |
| Anchors e aliases (reutilização) | Não | Sim (&anchor e *anchor) |
| Sistema de tipos | Estrito (string, number, bool, null, array, object) | Coerção implícita (yes, no, null, datas, escalares interpretados) |
| Desempenho de parsing | Muito rápido, parsers nativos em todo o lado | Mais lento, gramática muito mais ampla |
| Adoção para APIs REST | Padrão de facto | Raro |
| Adoção para configuração | Raro (salvo package.json, tsconfig.json) |
Padrão de facto (Kubernetes, CI/CD, Ansible) |
Quando usar JSON?
O JSON impõe-se assim que um programa fala com outro programa. Os seus casos de uso típicos:
- APIs REST e GraphQL: payloads de pedido e de resposta.
- Intercâmbio de dados entre microsserviços e filas de mensagens.
- Código JavaScript nativo:
JSON.parseeJSON.stringifysem dependência. - Armazenamento no lado do navegador:
localStorage,sessionStorage, IndexedDB. - Pedidos AJAX e
fetch. - Variantes binárias ou orientadas a fluxo: BSON (MongoDB), JSON Lines (logs, datasets ML), MessagePack.
- Configuração de ferramentas JS / TS:
package.json,tsconfig.json,composer.json.
Quando usar YAML?
O YAML impõe-se assim que um humano edita regularmente o ficheiro. Os seus casos de uso típicos:
- Docker Compose (
docker-compose.yml) e perfis de stack. - Manifestos Kubernetes (Deployment, Service, Ingress, Helm charts).
- Playbooks Ansible e inventários.
- Pipelines CI/CD: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
- Especificações OpenAPI / Swagger e AsyncAPI.
- Configuração aplicacional anotada (Symfony, Spring Boot, Rails) onde os comentários são úteis.
- Ficheiros editados frequentemente à mão, em que a concisão e a legibilidade prevalecem sobre a velocidade de parsing.
Armadilhas comuns em YAML
O YAML é mais permissivo do que o JSON, o que o torna um formato poderoso mas traiçoeiro. As armadilhas mais frequentes:
- Indentação: as tabulações são proibidas pela especificação, apenas os espaços são válidos. Misturar os dois ou mudar o número de espaços num mesmo bloco quebra o parsing.
- Coerção automática dos escalares:
yes,no,on,off,true,false,null,None,~são interpretados como booleanos ou null. Exemplo armadilha: um código postal01234não citado torna-se o inteiro1234, e um nome de paísNO(Noruega) torna-sefalse. Cite sempre as strings ambíguas. - Strings multilinhas:
|(block literal) conserva as quebras de linha tal como estão, enquanto>(folded) substitui as quebras de linha por espaços. Os indicadores de chomping-e+ajustam o comportamento na quebra final. - YAML 1.1 vs 1.2: a 1.1 (ainda muito difundida, por exemplo via PyYAML por defeito) trata
yes/no/on/offcomo booleanos, o que a 1.2 eliminou. Os comportamentos também diferem nos números em base 8. - Datas implícitas:
2024-01-15sem aspas é interpretado como um objeto data por alguns parsers, não como uma string.
Exemplos lado a lado
O mesmo documento, expresso em JSON e depois em YAML. Configuração simples de uma aplicação com as suas dependências e o seu ambiente:
Versão JSON
{
"name": "cdrn-app",
"version": "1.14.2",
"environment": "production",
"dependencies": {
"php": "^8.3",
"symfony/framework-bundle": "^7.0",
"doctrine/orm": "^3.0"
},
"features": ["cache", "mailer", "queue"],
"debug": false
}
Versão YAML equivalente
# Configuration de l'application
name: cdrn-app
version: 1.14.2
environment: production
dependencies:
php: '^8.3'
symfony/framework-bundle: '^7.0'
doctrine/orm: '^3.0'
features:
- cache
- mailer
- queue
debug: false
A versão YAML é mais curta em cerca de 25 % em caracteres, aceita um comentário no início e lê-se como uma lista de propriedades sem ruído sintático.
Como utilizar o conversor
Passos para converter os seus dados:
- Cole o seu documento fonte (JSON ou YAML) no campo de entrada.
- Selecione o sentido de conversão pretendido (JSON para YAML, ou YAML para JSON).
- Clique no botão de conversão: o resultado formatado aparece na área de saída.
- Verifique a rendição, depois use o botão de cópia para recuperar o resultado para a sua área de transferência.
A conversão é efetuada localmente no seu navegador ou através de uma rota de servidor dedicada conforme o tooling: nenhum dado sensível é conservado.
Perguntas frequentes
JSON ou YAML para os meus ficheiros de configuração?
Se o ecossistema impõe um formato (Kubernetes em YAML, package.json em JSON), siga a convenção. Caso contrário, privilegie YAML para as configurações longas e anotadas que edita à mão, e JSON para as configurações geradas por um programa ou consumidas por código. A presença de comentários úteis é muitas vezes o argumento decisivo a favor do YAML.
Como manter os comentários num round-trip YAML para JSON para YAML?
Não é possível. O JSON não suporta comentários: assim que se converte YAML em JSON, os comentários perdem-se definitivamente. Para preservar os comentários em edições programáticas, utilize um parser que conserva a formatação, como ruamel.yaml em Python em modo round-trip, ou evite completamente a passagem por JSON.
Porque é que o meu ficheiro YAML faz parse corretamente em local mas falha em prod?
Causas frequentes: versões de parser diferentes (YAML 1.1 vs 1.2), tabulações introduzidas por um editor, valores não citados que se parecem com booleanos (NO, off) ou com números (01234), codificação do ficheiro (UTF-8 BOM mal gerido). Cite sistematicamente as strings ambíguas e fixe a versão do parser no seu projeto.
JSON é um subconjunto de YAML?
Desde o YAML 1.2, sim na prática: qualquer documento JSON válido é um documento YAML 1.2 válido. O inverso é falso: um documento YAML que utiliza comentários, anchors, datas implícitas ou vários documentos num ficheiro não pode ser expresso diretamente em JSON sem perda de informação.
Que alternativas a JSON e YAML conhecer?
TOML: popular para a configuração (Cargo, pyproject.toml), bom compromisso entre legibilidade e tipagem explícita. INI: muito simples, mas sem estrutura encadeada padrão. XML: verboso, mas continua pertinente para SOAP e algumas configs Java legacy. HCL: utilizado pelo Terraform. JSON5 e JSONC: extensões de JSON que permitem comentários e vírgulas finais.
Qual o peso de YAML vs JSON?
A estrutura equivalente, o YAML é geralmente 15 a 30 % mais curto em octetos, graças à ausência de aspas em torno das chaves e da maioria das strings, e à ausência de chavetas. No wire (transporte HTTP), o JSON minificado mantém-se comparável, mas o YAML continua mais compacto em versão legível. Para o puro desempenho de parsing, o JSON é várias vezes mais rápido, o que justifica o seu uso em APIs de alto tráfego.
Exemplo de pedido
curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
-H "Content-Type: application/json" \
-d '{"json":"...","space_tabulation":1}'
Esquema de entrada
| Campo | Tipo | Obrigatório | Predefinição |
|---|---|---|---|
json |
text | ✓ | – |
space_tabulation |
integer | ✓ | – |
Pontos de acesso
GET https://cdrn.fr/api/v1/tools- lista todas as ferramentas disponíveisGET https://cdrn.fr/api/v1/tools/json-yaml-converter- obtém o esquema desta ferramentaPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- executa esta ferramenta com um payload JSON