가이드
코드에서 YAML을 JSON으로 변환
변환이 브라우저 탭이 아니라 스크립트나 빌드 단계에 들어가야 할 때, 이것이 그 대응물입니다.
작성 yamltojsonfree · 게시일 · 수정일
Python, Node.js, Go, 그리고 명령줄
각 스니펫은 input.yaml을 읽어 정형화된 JSON을 출력합니다. 하지만 서로 바꿔 쓸 수는 없습니다 — 각각 아래의 메모가 그 라이브러리가 어떤 YAML 버전을 구현하는지 알려 주며, 그 차이는 데이터를 조용히 바꿀 수 있습니다.
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))PyYAML은 YAML 1.1을 구현하므로 여기서 no는 False가 됩니다 — 기본이 1.2인 브라우저 도구와 다릅니다.
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));js-yaml v5의 기본은 YAML 1.2입니다 — 이 사이트의 브라우저 도구와 같은 엔진, 같은 기본값입니다.
Go
import (
"encoding/json"
"os"
"sigs.k8s.io/yaml"
)
in, _ := os.ReadFile("input.yaml")
out, _ := yaml.YAMLToJSON(in)
os.Stdout.Write(out)sigs.k8s.io/yaml은 JSON 태그를 통해 변환하며, Kubernetes 자체가 사용하는 방식입니다.
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.yaml이것은 mikefarah/yq입니다. 다른 yq(kislyuk)는 플래그가 다른 jq 래퍼입니다.
스크립트에서 반드시 지켜야 할 세 가지
안전한 로더를 사용하세요. Python에서 로더를 명시하지 않은 yaml.load()는 태그가 붙은 YAML로부터 임의의 Python 객체를 만들 수 있습니다 — 입력이 내 것이 아니라면 그것은 코드 실행입니다. safe_load()는 일반 데이터만 파싱하며, 다른 것을 쓸 이유는 거의 없습니다.
YAML 버전을 알아 두세요. PyYAML은 YAML 1.1을 읽으므로 country: NO는 False로 나옵니다. js-yaml v5와 Go의 Kubernetes 계열 파서는 1.2를 읽으므로 같은 줄이 문자열로 유지됩니다. 한 라이브러리로 변환하고 다른 라이브러리로 검증하는 파이프라인은 스스로 모순될 수 있습니다. 영향을 받는 값의 전체 목록은 YAML 1.1과 1.2 차이 가이드에 있습니다.
다중 문서 스트림을 처리하세요. Kubernetes와 Helm 출력은 보통 ---로 구분된 여러 문서입니다. 단순한 load는 첫 번째만 읽고 나머지를 조용히 버립니다 — Python에서는 yaml.safe_load_all(), js-yaml에서는 loadAll(), 또는 위에 나온 yq 호출을 사용하면 모든 문서를 얻을 수 있습니다.
아니면 스크립트를 아예 건너뛰기
일회성 변환이라면 무료 YAML → JSON 변환기가 위의 모든 것을 브라우저에서 처리합니다: 다중 문서 스트림, 앵커와 병합 키, YAML 1.1과 1.2 모드, 정확한 줄에 고정된 오류. 어떤 것도 업로드되지 않으며 파서는 전적으로 사용자의 기기에서 실행됩니다.
참고 자료
- PyYAML: YAML 로딩 — 왜 load가 아니라 safe_load인가
- js-yaml README — load, loadAll, 스키마 옵션
- sigs.k8s.io/yaml — Kubernetes 의미론을 따르는 Go용 YAML → JSON
- yq 문서(mikefarah) — 위에서 사용한 -o=json, -I, -N 플래그
- YAML 1.2.2 명세 — 대부분의 최신 파서가 목표로 하는 버전