YAML to JSON 변환이란?
YAML to JSON 변환은 YAML(YAML Ain't Markup Language)로 작성된 데이터를 JSON(JavaScript Object Notation)으로 변환하는 작업입니다. 두 형식 모두 구조화된 데이터를 키-값 쌍, 시퀀스, 중첩 객체로 표현하지만 문법이 다릅니다. YAML은 들여쓰기와 최소한의 구두점을 사용하는 반면, JSON은 중괄호, 대괄호, 필수 따옴표를 사용합니다. 서로 다른 형식을 요구하는 시스템 간에 설정 데이터를 이동할 때 두 형식 간 변환이 자주 필요합니다.
YAML은 사람이 읽기 쉽도록 설계되었습니다. 주석, 여러 줄 문자열, 앵커, 별칭을 지원하는데, 이 중 어떤 것도 JSON에는 존재하지 않습니다. YAML을 JSON으로 변환하면 YAML 고유 기능들이 처리됩니다. 앵커는 인라인으로 확장되고, 주석은 삭제되며, 여러 줄 블록은 이스케이프 문자열로 변환됩니다. 출력 결과는 어떤 JSON 파서도 읽을 수 있는 유효한 JSON입니다.
YAML 1.2 명세는 JSON을 YAML의 부분 집합으로 명시적으로 정의합니다. 즉, 유효한 JSON 문서는 모두 유효한 YAML이기도 합니다. 반대는 성립하지 않습니다. 주석, 앵커, 복잡한 키를 사용하는 YAML 문서는 JSON에 직접적으로 대응하는 표현이 없어 변환 과정에서 단순화해야 합니다. 이 도구는 그 변환을 자동으로 처리하여 유효한 YAML 입력으로부터 깔끔하고 잘 정형화된 JSON을 생성합니다.
YAML 1.2 Specification — yaml.org →
온라인 YAML to JSON 변환기를 사용하는 이유
YAML을 JSON으로 수동으로 변환하는 것은 오류가 발생하기 쉬우며, 특히 깊이 중첩된 구조나 여러 줄 값이 있을 때 더욱 그렇습니다. 브라우저 기반 변환기는 결과를 즉시 제공하고 애플리케이션에 도달하기 전에 YAML 문법 오류를 잡아냅니다.
YAML to JSON 활용 사례
YAML to JSON 타입 매핑 참조
모든 YAML 데이터 타입은 변환 중에 특정 JSON 타입으로 매핑됩니다. 아래 표는 각 YAML 구성 요소와 그에 대응하는 JSON 출력을 보여줍니다. 이 매핑을 이해하면 변환 후 데이터가 어떻게 표현될지 예측하고 불리언이나 null 값 같은 타입에서 예상치 못한 결과를 방지할 수 있습니다.
| YAML 타입 | YAML 문법 | JSON 출력 |
|---|---|---|
| Mapping | name: Alice | { "name": "Alice" } |
| Sequence | - apple\n- banana | ["apple", "banana"] |
| String | greeting: hello world | "hello world" |
| Integer | count: 42 | 42 |
| Float | ratio: 3.14 | 3.14 |
| Boolean | active: true | true |
| Null | value: null | null |
| Multiline (|) | bio: |\n Line one\n Line two | "Line one\nLine two\n" |
| Folded (>) | note: >\n A long\n paragraph | "A long paragraph\n" |
| Anchor/Alias | &default\n <<: *default | Resolved inline (no $ref) |
YAML vs JSON 문법 비교
YAML과 JSON은 동일한 데이터 모델을 표현하지만 문법 규칙이 다릅니다. 아래 차이점은 주석과 앵커 같은 일부 YAML 기능이 JSON에 대응하는 표현이 없는 이유를 설명합니다.
코드 예제
다음은 YAML을 JSON으로 프로그래밍 방식으로 변환하는 예제입니다. 각 예제는 YAML 문자열을 파싱하여 형식화된 JSON을 출력합니다.
import { load } from 'js-yaml'
const yamlStr = `
server:
host: localhost
port: 8080
ssl: true
`
const json = JSON.stringify(load(yamlStr), null, 2)
console.log(json)
// → {
// → "server": {
// → "host": "localhost",
// → "port": 8080,
// → "ssl": true
// → }
// → }import yaml, json
yaml_str = """
database:
host: db.example.com
port: 5432
credentials:
user: admin
password: s3cret
"""
data = yaml.safe_load(yaml_str)
print(json.dumps(data, indent=2))
# → {
# → "database": {
# → "host": "db.example.com",
# → "port": 5432,
# → "credentials": {
# → "user": "admin",
# → "password": "s3cret"
# → }
# → }
# → }package main
import (
"encoding/json"
"fmt"
"log"
"gopkg.in/yaml.v3"
)
func main() {
yamlData := []byte(`
services:
web:
image: nginx:latest
ports:
- "80:80"
`)
var obj map[string]interface{}
if err := yaml.Unmarshal(yamlData, &obj); err != nil {
log.Fatal(err)
}
jsonBytes, _ := json.MarshalIndent(obj, "", " ")
fmt.Println(string(jsonBytes))
// → { "services": { "web": { "image": "nginx:latest", "ports": ["80:80"] } } }
}# Convert a YAML file to JSON with yq
yq -o=json config.yaml > config.json
# Pipe YAML into yq for one-off conversion
echo "name: demo" | yq -o=json
# → { "name": "demo" }
# Python one-liner (no extra install on most systems)
python3 -c "import yaml, json, sys; print(json.dumps(yaml.safe_load(sys.stdin), indent=2))" < config.yaml