JSON para YAML
Para Kubernetes, Compose e arquivos de CI, sem mandar a sua configuração para lugar nenhum.
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.