YAML ⇔ JSON 변환기
YAML와 JSON을 상호 변환합니다. 설정 파일 형식 변환이나 Kubernetes 매니페스트, Docker Compose, GitHub Actions, OpenAPI 편집에 활용하세요.
지원 형식
- YAML 1.2 준수 (js-yaml 라이브러리 사용)
- JSON은 포맷·검증된 상태로 출력
- 복수 문서(
---구분: 첫 번째 문서만 변환됩니다 - YAML 앵커(
&/*)도 지원
복사되었습니다
📖 자주 걸리는 지점
js-yaml(YAML 1.2 준수)을 사용해 YAML 과 JSON 을 상호 변환합니다. 앵커와 에일리어스, 복수 문서, 구문 오류의 행 번호 표시에 대응하며 처리는 브라우저 안에서 끝납니다. YAML 의 어려움은 구문이 아니라 쓴 기억이 없는 타입 변환이 조용히 일어나는 데 있습니다 — 문자열인 줄 알았던 값이 숫자나 진릿값이 되고 게다가 에러가 나지 않으므로 동작하지 않게 되고 나서 원인을 찾게 됩니다.
| 사례 | 무슨 일이 일어나는가 | 어떻게 하면 되는가 |
|---|---|---|
| 문자열인 줄 알았던 값이 숫자나 진릿값이 된다 | YAML 은 따옴표 없는 값을 겉모습에서 타입을 추측해 변환합니다. 자주 깨지는 것은 — version: 1.10 은 숫자가 되어 1.1 과 같아지고 zip: 0070 은 8 진수로 해석될 수 있으며 country: NO(노르웨이)는 YAML 1.1 에서는 false, GitHub Actions 의 on: 은 1.1 에서는 true 라는 키 이름이 됩니다. 이 도구는 YAML 1.2 준수이므로 NO 나 on 은 문자열 그대로이지만 Python 의 PyYAML 의 기본값이나 Ruby 의 Psych 는 지금도 1.1 상당이므로 같은 파일이 처리계에 따라 다른 의미가 됩니다. |
망설여지면 따옴표를 붙이세요. 특히 버전 번호 · 국가 코드 · 우편번호 · 맨 앞이 0 인 숫자 · yes/no/on/off/true/false · null/~ · : 나 # 를 포함하는 값은 반드시 따옴표를 붙입니다. 따옴표는 장황함이 아니라 의도의 명시입니다 — 리뷰에서 왜 여기만 따옴표를 붙이느냐고 물으면 그것은 올바른 질문이며 답은 이 값은 문자열이라고 정했기 때문 입니다. 설정 파일을 저장소에 넣기 전에 한 번 JSON 으로 변환해 타입을 눈으로 확인하세요 — 이 페이지의 변환 결과에서 "1.1" 이 아니라 1.1 로 나온다면 그것이 사고의 전조입니다. |
| 앵커와 에일리어스가 펼쳐져 참조가 사라진다 | &defaults 로 정의해 <<: *defaults 로 가져오는 작성법은 YAML 의 중복을 줄이는 강력한 기능이지만 JSON 에는 이 개념이 없습니다. 따라서 변환하면 모든 병합이 실제로 펼쳐져 같은 내용이 몇 번이고 쓰인 JSON 이 됩니다. 여기까지는 상정 내이지만 문제는 거기서 YAML 로 되돌렸을 때입니다 — 앵커는 복원되지 않고 DRY 하게 쓰여 있던 설정 파일이 전부 그대로 쓰인 장대한 파일로 바뀝니다. docker-compose.yml 이나 .gitlab-ci.yml 처럼 공통 정의를 많이 쓰는 파일에서는 행 수가 몇 배가 됩니다. |
설정 파일을 왕복시키지 마세요. YAML 을 정본으로 편집하고 JSON 은 기계에 넘기는 최종 출력으로서만 생성하는 것이 올바른 흐름입니다 — CI 가 API 에 JSON 으로 던지는 용도가 바로 이것입니다. 이미 앵커가 사라진 YAML 을 받은 경우 기계적으로 되돌리는 방법은 없습니다 — 중복된 곳을 눈으로 찾아 손으로 앵커로 묶어 내는 수밖에 없습니다. 그렇기에 정본이 어느 쪽인지를 저장소에서 명확히 해 두세요 — 생성물인 JSON 을 커밋한다면 generated/ 같은 디렉터리에 두거나 헤더에 자동 생성. 편집하지 말 것 이라고 써 두면 사고가 줄어듭니다. |
| 들여쓰기 오류를 고칠 수 없다 | YAML 은 탭 문자를 들여쓰기로 인정하지 않습니다 — 에디터의 설정으로 탭이 하나 섞여 들어가는 것만으로 반드시 실패합니다. 게다가 화면상으로는 스페이스와 구분이 되지 않습니다. 더 까다로운 것이 에러 메시지가 가리키는 행으로 YAML 의 파서는 구조의 모순을 알아챈 행을 보고하기 때문에 실제로 틀린 것은 그 몇 줄에서 수십 줄 위인 일이 흔히 있습니다. 중첩이 깊은 Kubernetes 매니페스트에서 120 행에서 에러라고 해서 118 행부터 찾아도 아무것도 없는 것은 이 때문입니다. | 먼저 에디터에서 탭을 스페이스로 변환을 켜세요 — .editorconfig 에 [*.yml] indent_style = space 라고 써 두면 팀 전체에서 막을 수 있습니다. 에러를 쫓을 때는 보고된 행에서 위를 향해 읽으세요 — 들여쓰기의 깊이가 한 단만 이상한 곳을 찾는 것이 요령입니다. 또 하나, 목록의 들여쓰기에는 두 가지 작성법이 허용되어 있습니다 — - 를 부모와 같은 열에 두거나 2 스페이스 내리거나이며 어느 쪽이나 옳지만 한 파일에서 섞으면 사람이 잘못 읽습니다. yamllint 를 CI 에 넣으면 이런 종류의 문제는 쓴 순간에 발견됩니다 — 실행 시에 깨지는 것보다 압도적으로 저렴합니다. |
외부에서 받은 YAML 을 서버 쪽에서 파스할 때는 반드시 안전한 로더를 쓰세요. Python 의 yaml.load() 는 임의의 Python 객체를 구축할 수 있으므로 조작된 YAML 을 읽히면 코드 실행에 이릅니다 — 반드시 yaml.safe_load() 를 쓰세요. js-yaml 은 v4 에서 기본값이 안전 쪽이 되었지만 오래된 버전을 쓰는 프로젝트에서는 safeLoad 를 명시할 필요가 있습니다. 브라우저에서 도는 이 페이지는 safe 상당이므로 문제없습니다. 한 가지 더, 복수 문서의 취급에 주의하세요 — Kubernetes 는 --- 구분으로 한 파일에 복수의 리소스를 넣지만 JSON 에는 복수 문서라는 개념이 없으므로 배열이 됩니다. YAML 로 되돌릴 때 --- 구분으로 복원하는 것을 잊으면 kubectl apply 가 배열은 Kind 로서 부정하다고 하며 통과하지 않습니다 — 변환을 끼우는 파이프라인에서는 여기를 반드시 테스트하세요.
📖 사용법
-
1
입력 붙여넣기YAML 또는 JSON을 왼쪽에 붙여넣으면 오른쪽에 자동 변환됩니다.
-
2
방향 전환방향을 선택하고 들여쓰기 폭을 지정할 수 있습니다.
-
3
검증 오류 확인구문 오류는 줄 번호와 원인과 함께 표시됩니다.
❓ 자주 묻는 질문
YAML 앵커와 엘리어스도 지원하나요?
복수 문서는 처리되나요?
Docker Compose / K8s 매니페스트에 사용할 수 있나요?
YAML Norway 버그도 처리되나요?
🐛 이 도구에서 문제가 발생했나요?
무료 · 가입 불필요. 재현 절차만이라도 도움이 됩니다. 보고는 운영자에게 직접 전달되어 개선에 사용됩니다.
보고 감사합니다!
운영자에게 전달되었습니다. 개선에 사용됩니다.