Guia
Converter YAML para JSON em código
Quando a conversão pertence a um script ou a um passo de build e não a um separador do navegador, estes são os equivalentes.
Por yamltojsonfree · Publicado em · Atualizado em
Python, Node.js, Go e a linha de comandos
Cada excerto lê input.yaml e imprime JSON formatado. Não são intercambiáveis, no entanto — a nota por baixo de cada um diz que versão de YAML essa biblioteca implementa, e essa diferença pode mudar os seus dados em silêncio.
Python
import json, yaml
with open("input.yaml") as f:
data = yaml.safe_load(f) # safe_load, never load()
print(json.dumps(data, indent=2))O PyYAML implementa YAML 1.1, por isso aqui no torna-se False — ao contrário da ferramenta do navegador, que usa 1.2 por defeito.
Node.js
import { readFileSync } from "node:fs";
import { load } from "js-yaml";
const data = load(readFileSync("input.yaml", "utf8"));
console.log(JSON.stringify(data, null, 2));O js-yaml v5 usa YAML 1.2 por defeito — o mesmo motor e as mesmas predefinições da ferramenta deste site.
Go
import (
"encoding/json"
"os"
"sigs.k8s.io/yaml"
)
in, _ := os.ReadFile("input.yaml")
out, _ := yaml.YAMLToJSON(in)
os.Stdout.Write(out)O sigs.k8s.io/yaml converte através de tags JSON, que é o que o próprio Kubernetes usa.
Bash (yq)
# Single document
yq -o=json input.yaml
# Multi-document into a JSON array
yq -o=json -I=2 'select(document_index >= 0)' -N input.yaml
# Minified
yq -o=json -I=0 input.yamlEste é o mikefarah/yq. O outro yq (kislyuk) é um wrapper do jq com opções diferentes.
Três coisas a acertar num script
Use o loader seguro. Em Python, yaml.load() sem um loader explícito pode construir objetos Python arbitrários a partir de YAML com tags — o que é execução de código se a entrada não for sua. safe_load() analisa apenas dados simples, e quase nunca há razão para usar outra coisa.
Conheça a sua versão de YAML. O PyYAML lê YAML 1.1, por isso country: NO sai como False; o js-yaml v5 e o parser Go ao estilo Kubernetes leem 1.2, por isso a mesma linha continua a ser uma string. Um pipeline que converte com uma biblioteca e valida com outra pode contradizer-se a si próprio. A lista completa de valores afetados está no guia YAML 1.1 vs 1.2.
Trate os fluxos multi-documento. A saída do Kubernetes e do Helm é normalmente vários documentos separados por ---. Um load simples lê só o primeiro e descarta o resto em silêncio — use yaml.safe_load_all() em Python, loadAll() em js-yaml, ou a invocação do yq mostrada acima para obter todos os documentos.
Ou salte o script por completo
Para uma conversão pontual, o conversor gratuito de YAML para JSON faz tudo o que está acima no navegador: fluxos multi-documento, anchors e merge keys, modos YAML 1.1 e 1.2, e erros fixados à linha exata. Nada é enviado — o parser corre inteiramente na sua máquina.
Referências
- PyYAML: carregar YAML — porquê safe_load, nunca load
- README do js-yaml — load, loadAll e opções de esquema
- sigs.k8s.io/yaml — YAML para JSON em Go com semântica do Kubernetes
- Documentação do yq (mikefarah) — as opções -o=json, -I e -N usadas acima
- Especificação YAML 1.2.2 — a versão que a maioria dos parsers modernos visa
Todas as ferramentas
YAML para JSON
Converta YAML em JSON formatado ou minificado, com erros na linha exata.
AbrirJSON para YAML
Transforme JSON em YAML legível com controle de indentação e ordem das chaves.
AbrirValidador YAML
Verifique a sintaxe YAML e veja uma explicação clara do erro.
AbrirFormatador YAML
Reformate YAML bagunçado com indentação consistente e comentários preservados.
Abrir