Converter entre JSON e YAML

converte JSON para YAML (e vice-versa) preservando a estrutura, com indentação configurável. Prático para migrar uma configuração entre ficheiros .json e .yaml

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.parse e JSON.stringify sem 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 postal 01234 não citado torna-se o inteiro 1234, e um nome de país NO (Noruega) torna-se false. 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/off como booleanos, o que a 1.2 eliminou. Os comportamentos também diferem nos números em base 8.
  • Datas implícitas: 2024-01-15 sem 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:

  1. Cole o seu documento fonte (JSON ou YAML) no campo de entrada.
  2. Selecione o sentido de conversão pretendido (JSON para YAML, ou YAML para JSON).
  3. Clique no botão de conversão: o resultado formatado aparece na área de saída.
  4. 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íveis
  • GET https://cdrn.fr/api/v1/tools/json-yaml-converter - obtém o esquema desta ferramenta
  • POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute - executa esta ferramenta com um payload JSON