Utilia

Conversor de JSON para YAML

Converte JSON em YAML e YAML em JSON no teu navegador, com suporte de âncoras, merge keys e ficheiros com vários documentos. Nada é enviado.

Conversão

Como usar o conversor de JSON para YAML

  1. Escolhe a direção: JSON → YAML ou YAML → JSON.
  2. Cola os teus dados ou clica em Abrir um ficheiro para carregar um ficheiro .json, .yaml ou .yml (até 10 MB).
  3. Escolhe a Indentação (2 ou 4 espaços) e, se quiseres, Ordenar as chaves alfabeticamente.
  4. Clica em Converter, ou continua simplesmente a escrever: o resultado atualiza-se sozinho. Se a entrada for inválida, a mensagem de erro indica a linha e a coluna do problema.
  5. Copia ou transfere o resultado. Inverter a direção passa o resultado para a entrada, para o converteres no sentido contrário.

JSON e YAML: os mesmos dados, sintaxe diferente

Na prática, o YAML é um superconjunto do JSON: todos os documentos JSON descrevem dados que o YAML consegue exprimir, e o YAML acrescenta uma sintaxe mais leve, mais fácil de ler e editar por pessoas. É por isso que os manifestos Kubernetes, os ficheiros Docker Compose, os pipelines do GitHub Actions e do GitLab CI, os playbooks Ansible e as especificações OpenAPI são normalmente escritos em YAML, enquanto as APIs e os programas trocam JSON.

Os mesmos dados nos dois formatos:

{"name": "web", "ports": [80, 443], "env": {"DEBUG": false}}
name: web
ports:
  - 80
  - 443
env:
  DEBUG: false

JSON → YAML

O conversor escreve YAML em estilo de bloco: uma chave por linha, listas com hífenes e objetos aninhados indentados. As strings longas nunca são dobradas, e as strings com várias linhas usam o estilo literal |, para que as quebras de linha fiquem exatamente iguais. As strings que o YAML leria de outra forma como outro tipo são postas entre aspas: "yes", "1.0" ou "null" continuam a ser strings depois de uma ida e volta. Ordenar as chaves ordena alfabeticamente as chaves de todos os objetos, o que facilita a comparação de dois ficheiros de configuração.

YAML → JSON

O YAML é lido com o core schema do YAML 1.2, as mesmas regras usadas pela maioria das ferramentas modernas:

  • true/false, os números e null (ou ~) passam a valores JSON; yes, no, on e off continuam a ser strings, como exige a especificação YAML 1.2.
  • As âncoras e aliases (&base, *base) são expandidos, e as merge keys (<<: *base), comuns nos ficheiros de CI, são suportadas.
  • Um ficheiro com vários documentos separados por --- passa a uma lista JSON com um elemento por documento, e uma mensagem diz-te quantos foram combinados.
  • Os comentários são descartados, já que o JSON não tem comentários.
  • .inf e .nan não têm equivalente em JSON; são escritos como as strings "Infinity" e "NaN".

Para proteger o teu navegador de ficheiros «billion laughs», em que alguns aliases se expandem em milhares de milhões de valores, um documento que se expanda para mais de um milhão de valores é recusado.

Erros comuns em YAML

  • Tabulações na indentação: o YAML só permite espaços.
  • Indentação incoerente: os elementos da mesma lista ou do mesmo objeto têm de começar na mesma coluna.
  • Falta de espaço depois dos dois pontos: chave:valor é uma única string, enquanto chave: valor é um par chave-valor.
  • Caracteres especiais sem aspas: um valor que comece por @, um acento grave, *, & ou !, ou que contenha : ou #, tem de ir entre aspas.

Perguntas frequentes

O meu ficheiro é enviado para um servidor?

Não. A conversão corre no teu navegador, e os teus ficheiros de configuração, segredos ou dados de APIs nunca saem do teu computador.

Porque é que «yes» e «no» não são convertidos em booleanos?

Desde o YAML 1.2, só true e false são booleanos. Os parsers antigos de YAML 1.1 tratavam yes, no, on e off como booleanos, o que deu origem ao famoso «problema da Noruega» (o código de país NO lido como falso). Esta ferramenta segue o YAML 1.2.

Os comentários do YAML são preservados?

Não. O JSON não tem comentários, por isso perdem-se em YAML → JSON. Ao converter JSON → YAML, podes acrescentar comentários ao resultado depois.

Posso converter um ficheiro Kubernetes com vários recursos?

Sim. Cada recurso separado por --- passa a um elemento de uma lista JSON. Converter essa lista de volta para YAML dá um único documento que contém uma lista.

O conversor altera a ordem das chaves?

Não, a menos que marques Ordenar as chaves: as chaves mantêm a ordem em que aparecem na tua entrada. A única exceção vem do próprio JavaScript: as chaves que são números inteiros, como "10" ou "2", ficam em primeiro lugar, por ordem crescente.