Ir para o conteúdo
jsonbeautifiers
Português

JSON para YAML

Para Kubernetes, Compose e arquivos de CI, sem mandar a sua configuração para lugar nenhum.

JSON
YAML

Nada do que você cola sai do seu navegador. A lista de permissões connect-src transforma isso em uma garantia do navegador, e não em uma promessa. Confira você mesmo

Converta JSON para YAML para manifestos do Kubernetes, arquivos do Docker Compose, workflows do GitHub Actions e qualquer outra coisa que prefira o formato legível.

Como o YAML é um superconjunto do JSON, esta conversão sempre dá certo. A direção interessante é a outra.

O que muda e o que não muda

Todo valor JSON tem equivalente em YAML, então nada se perde. Objetos viram mappings, arrays viram sequências, e as aspas ao redor das chaves e das strings simples somem.

Strings que poderiam ser confundidas com outra coisa mantêm as aspas. Isso inclui a palavra no, a palavra yes, qualquer coisa que pareça número e qualquer coisa que pareça data. O gerador é conservador nisso de propósito, pelo motivo explicado na página YAML para JSON.

Inteiros grandes

O YAML tem inteiros de precisão arbitrária, mas o valor ainda precisa sobreviver ao JavaScript no caminho. Um inteiro acima de 2^53-1 é escrito aqui como string entre aspas para que nenhum dígito se perca, e a conversão avisa que fez isso. Emitir em silêncio um número arredondado seria pior.

Largura de linha

A quebra de linha vem desligada por padrão. Geradores de YAML tradicionalmente quebram strings longas em 80 colunas, o que é aceitável para prosa e péssimo para uma URL, um blob em base64 ou uma linha de comando, porque a forma quebrada é mais difícil de buscar com grep e de editar. Saída sem quebra é o que quase todo mundo quer.

How to do this in code

Convertendo em código.

py Python

O PyYAML ordena as chaves por padrão, o que reordena caladamente um arquivo de configuração que você queria converter fielmente.

import json, yaml

data = json.loads(text)
out = yaml.safe_dump(
    data,
    sort_keys=False,        # default is True, which reorders your file
    default_flow_style=False,
    allow_unicode=True,     # otherwise é becomes an escape
    width=10**6,            # effectively no wrapping
)
sh Shell
# yq, the YAML counterpart to jq
yq -P eval . input.json > output.yaml

# Or via Python, with no extra install
python -c 'import sys,json,yaml; yaml.safe_dump(json.load(sys.stdin), sys.stdout, sort_keys=False)' < in.json
js JavaScript
import { dump } from 'js-yaml';

const yaml = dump(JSON.parse(text), {
  lineWidth: -1,    // no wrapping
  noRefs: true,     // no anchors and aliases in the output
});

Perguntas frequentes

O YAML é mesmo um superconjunto do JSON?
O YAML 1.2 é, por decisão de projeto. Todo documento JSON válido é YAML válido. O YAML 1.1 não era bem, o que é mais um motivo para a versão importar.
Por que algumas das minhas strings saem entre aspas?
Porque sem aspas elas seriam lidas como outra coisa. no, yes, on, off, true, null, um número solto e qualquer coisa com cara de data precisam de aspas para continuarem strings em pelo menos alguns parsers de YAML. O gerador está sendo cuidadoso por você.
Dá para manter os meus comentários convertendo no outro sentido?
Não. O JSON não tem sintaxe de comentário, então um arquivo YAML com comentários os perde no caminho para o JSON, de forma permanente. É uma porta de mão única que vale conhecer antes de converter um arquivo de configuração que você mantém à mão.