YAML을 JSON으로 변환하기 (그리고 들여쓰기 오류 피하기)

YAML 1.2 이후로는 모든 JSON 문서가 유효한 YAML입니다. YAML 설정을 JSON으로 변환하면서 들여쓰기와 타입 추론의 함정에 유의하세요.

YAML과 JSON은 친척이다

YAML 1.2는 JSON의 엄격한 상위집합입니다. 따라서 어떤 JSON 문서도 이미 유효한 YAML입니다. YAML을 JSON으로 변환한다는 것은 주로 들여쓰기 기반 구조를 중괄호와 대괄호로 옮겨 쓰는 일입니다.

들여쓰기 규칙

YAML은 들여쓰기에 탭을 금지합니다 — 공백을 쓰고, 형제 키는 같은 깊이로 맞추세요. 떠도는 탭이나 잘못 정렬된 키는 가장 흔한 YAML 파싱 오류입니다.

노르웨이 문제

따옴표 없는 NO, yes, on, off는 일부 파서가 불리언으로 읽어, 국가 코드 NO가 false가 되어 버립니다. 그런 값은 문자열을 유지하도록 따옴표로 감싸세요.

안전하게 변환하기

먼저 YAML을 검증한 다음 변환하세요. 모호한 스칼라는 따옴표를 두고, 숫자・날짜・선행 0이 있는 값이 기대한 타입을 유지하는지 확인하세요.

여러 문서로 된 YAML 스트림

하나의 YAML 파일에 '---'로 구분된 여러 문서가 들어 있을 수 있습니다. JSON에는 대응 개념이 없습니다 — 각 문서를 따로 변환하고, 다운스트림 도구가 한꺼번에 필요로 한다면 JSON 배열로 묶으세요. Kubernetes 매니페스트가 대표적인 경우입니다.

Anchor와 alias

YAML의 & 앵커와 * 별칭은 참조로 노드를 재사용하게 해 주지만, JSON에는 별칭이 없습니다. 안전한 변환기는 각 별칭을 앵커 값의 복사본으로 풀어 문서가 커지게 됩니다. 다시 YAML로 돌리면 원래의 공유 관계는 잃는다는 점을 유의하세요.

YAML이 충실도를 잃을 때

주석, !!binary 같은 태그 어노테이션, 사용자 정의 태그, block과 flow 스타일의 차이, 키 순서는 YAML이 JSON이 될 때 사라집니다. 순수 데이터 교환이라면 괜찮지만, 사람 손으로 다시 편집할 설정 파일이라면 YAML을 진짜 원본으로 두는 편이 좋습니다.