O que é conversão JSON ↔ YAML?
JSON (JavaScript Object Notation, RFC 8259) é um formato de texto estrito delimitado por chaves para dados estruturados; YAML (YAML Ain't Markup Language, versão 1.2) é um superconjunto de JSON que usa indentação, quebras de linha e sintaxe legível para o mesmo modelo de valor. Converter entre os dois permite pivotar a mesma configuração entre uma forma amigável a máquinas (JSON para APIs, validação de esquemas, transformações programáticas) e uma forma amigável a humanos (YAML para revisões de código, manifests Kubernetes, workflows do GitHub Actions) sem reescrever uma única chave.
Como funciona a conversão JSON ↔ YAML?
Cada conversão roda localmente no seu navegador usando a biblioteca js-yaml embutida (MIT, versão 4.1.0). Os passos principais são:
- O seletor de modo (Detecção automática / JSON → YAML / YAML → JSON) decide qual pipeline roda. No modo Detecção automática, o primeiro caractere não-branco da entrada escolhe a direção —
{ou[significa JSON; qualquer outra coisa significa YAML. - JSON → YAML:
JSON.parsevalida a entrada e produz um valor JavaScript;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })escreve a forma YAML 1.2. Com Multi-documento ligado, um array de entrada é despejado um elemento por documento e unido com separadores---. - YAML → JSON:
jsyaml.loadAllanalisa todos os documentos da entrada (lidando com separadores---automaticamente) em um array; entradas de um único documento são desempacotadas para que a saída JSON seja o próprio documento, não um array de um elemento. - Indentação (2 ou 4 espaços) e Impressão bonita são configuráveis. Com Impressão bonita desligada, emite-se JSON minificado via
JSON.stringify(value)sem espaços em branco. - A saída é escrita na área de texto somente leitura. Em falhas de análise YAML, a mensagem de erro inclui a linha e coluna (1-indexadas) reportadas pelo
e.markdojs-yamlpara você ir direto ao bug.
Por que converter JSON e YAML com esta ferramenta?
- Privacidade: cada passagem de análise, transformação e emissão acontece no seu navegador. Os dados — incluindo secrets Kubernetes, JWTs assinados e configurações proprietárias — nunca chegam aos nossos servidores.
- YAML multi-documento:
jsyaml.loadAllreconhece separadores---e retorna um array de documentos, que o conversor desempacota para casos de um documento ou preserva como array JSON para casos multi-documento. - Âncoras e aliases resolvidos: o mecanismo
&anchor/*aliasdo YAML é tratado pelo esquema padrão dojs-yaml. Um valor definido uma vez e referenciado duas vezes vai e volta para um objeto JSON onde todas as referências guardam valores iguais. - Sem CDN, sem telemetria: a biblioteca
js-yaml.min.jsé servida da mesma origem da página, então a ferramenta funciona offline, atrás de proxies corporativos e em ambientes air-gapped.
Quais são as aplicações comuns da conversão JSON ↔ YAML?
Pivotar entre JSON e YAML aparece em DevOps, engenharia de plataforma e tooling de APIs:
- Manifests Kubernetes: converter um YAML
Deployment,ConfigMapouHelmReleasepara JSON para que um validador interno de políticas (Joi, Ajv, OPA Rego) possa lintar programaticamente, e depois voltar para YAML para o apply no cluster. - Workflows CI/CD: rodar um
workflow.ymldo GitHub Actions por JSON para que um gerador de código reescreva a matriz ou as dependências entre jobs, e então emitir o YAML limpo para o PR. - Especificações OpenAPI: colar um
openapi.jsonda documentação autogerada de um backend e convertê-lo emopenapi.yamlpara a referência editada por humanos versionada no repositório.
Como é um exemplo de ida e volta JSON ↔ YAML?
Colar {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} e pressionar CONVERTER no modo JSON → YAML produz oito linhas de YAML indentado com apiVersion: apps/v1 na primeira linha. Alimentando esse YAML de volta no modo YAML → JSON com Impressão bonita ligada retorna o objeto original byte a byte após um JSON.stringify(value, null, 2) estável, com a ordem das chaves preservada porque o esquema padrão do js-yaml honra a ordem de inserção nas duas direções.
Este conversor JSON ↔ YAML roda inteiramente no meu navegador?
Sim. Cada passagem de análise, transformação e emissão roda localmente como JavaScript dentro da sua aba do navegador. A biblioteca js-yaml embutida é entregue da mesma origem da página — sem CDN, sem fetch, sem XMLHttpRequest, sem navigator.sendBeacon sobre a entrada. A ferramenta também funciona offline depois que a página carrega, porque é um bundle estático HTML/CSS/JS com a biblioteca vendor copiada ao lado. Secrets Kubernetes, payloads JWT, YAMLs assinados de CloudFormation e configurações proprietárias permanecem no seu dispositivo.
Como o conversor lida com YAML multi-documento?
YAML suporta múltiplos documentos em um único fluxo, separados por linhas contendo apenas ---. Em YAML → JSON o conversor chama jsyaml.loadAll, que retorna cada documento como um valor JavaScript. Se exatamente um documento for encontrado, a saída JSON é esse documento diretamente; se dois ou mais forem encontrados, a saída JSON é um array. Em JSON → YAML, quando a entrada é um array JSON E o interruptor Multi-documento está ligado, cada elemento do array é emitido como seu próprio documento com separadores --- entre eles — útil para gerar um pacote compatível com kubectl apply a partir de um array JSON de recursos.
Âncoras e aliases YAML são suportados?
Sim — definições &anchor e referências *alias são resolvidas pelo esquema padrão do js-yaml durante o passo de carga. Uma entrada YAML como defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d é analisada em um objeto JSON onde job_a e job_b contêm ambos retries: 3, timeout: 30. A chave de merge << (uma extensão YAML 1.1 que o js-yaml ainda honra) também é suportada no esquema padrão.
Os comentários YAML são preservados ao converter para JSON e voltar?
Não — o js-yaml remove os comentários no passo de análise, então uma ida e volta YAML → JSON → YAML perde toda linha prefixada com #. É uma limitação conhecida do modelo load/dump; se a preservação de comentários for crítica, use uma biblioteca com consciência de comentários como o pacote npm yaml (que oferece uma API CST + AST projetada para preservar trivia) em vez do js-yaml. Para a maioria dos fluxos de conversão de configuração o trade-off é aceitável: o YAML pós ida e volta mantém todas as chaves, valores, âncoras e aliases, apenas sem os comentários escritos por humanos.
O que acontece com tags YAML customizadas?
O conversor usa o DEFAULT_SCHEMA do js-yaml, que entende !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary e !!timestamp — toda tag dos esquemas core e JSON do YAML 1.2. Tags customizadas ou específicas de aplicação (p. ex. !Ref no CloudFormation, !vault no Ansible) não são reconhecidas e aparecem como um erro claro citando a tag não suportada. Para CloudFormation especificamente, use o fluxo aws cloudformation package + --output-template-file para expandir as tags customizadas antes de colar neste conversor.
Este conversor JSON ↔ YAML já vem com js-yaml@4.1.0 embutido na mesma origem, suporta fluxos multi-documento e âncoras/aliases prontos para uso, e reporta erros de análise YAML com linha e coluna para você corrigir a origem. Sem upload, sem CDN, sem telemetria — cada byte permanece no seu navegador.