🔀 YAML ↔ JSON 변환기
YAML을 JSON으로, JSON을 YAML로 바꿔요. 들여쓰기·키 정렬·여러 문서를 지원하고, 틀린 곳은 줄·칸 번호로 알려 줘요.
사용법
- 왼쪽 칸에 YAML이나 JSON을 붙여 넣고 방향(YAML → JSON / JSON → YAML)을 골라요. 오른쪽에 바로 결과가 나와요.
- 들여쓰기는 2칸·4칸 중에 고르고, JSON으로 바꿀 때 '한 줄'을 고르면 공백 없이 압축된 JSON이 나와요. API 요청 본문에 넣을 때 편해요.
- 키 이름순 정렬을 켜면 모든 단계의 키를 알파벳·가나다순으로 정렬해요. 두 설정 파일을 비교하기 전에 켜 두면 텍스트 비교에서 차이가 잘 보여요.
- 문법이 틀리면 결과 아래에 몇 번째 줄 몇 번째 칸에서 무엇이 틀렸는지 나와요. '결과를 입력으로 ⇄'를 누르면 반대 방향으로 다시 바꿔 볼 수 있어요.
예시 — YAML을 JSON으로
아래는 예시 버튼의 설정 파일을 바꾼 결과예요. YAML의 들여쓰기가 JSON의 중괄호 { }로, 줄 앞 - 가 대괄호 [ ] 배열로 바뀌고, 주석(# 앱 설정 예시)은 JSON에 자리가 없어 사라져요.
| YAML | JSON (2칸) |
|---|---|
| |
YAML과 JSON 문법 대응표
| 표현 | YAML | JSON |
|---|---|---|
| 객체(맵) | key: value + 들여쓰기 | {"key": "value"} |
| 배열 | 줄마다 - 항목 또는 [a, b] | ["a", "b"] |
| 문자열 | 따옴표 생략 가능 | 항상 큰따옴표 |
| null | null, ~, 빈 값 | null |
| 참·거짓 | true / false | true / false |
| 주석 | # 주석 | 없음 (변환하면 사라짐) |
| 여러 줄 글 | | (줄바꿈 유지), > (한 줄로 접기) | \n이 든 한 문자열 |
| 반복 재사용 | 앵커 &이름, 별칭 *이름, 병합 << | 없음 (값이 복사돼 펼쳐짐) |
| 여러 문서 | ---로 구분 | 없음 (이 도구는 배열로 묶음) |
YAML 1.2는 JSON을 거의 그대로 포함하도록 만들어져서, 올바른 JSON은 대부분 그대로 YAML로도 읽혀요. 그래서 JSON → YAML 변환은 거의 실패하지 않고, 실패한다면 JSON 쪽 문법(끝의 쉼표, 작은따옴표, 주석)이 틀린 경우가 대부분이에요. JSON 문법만 따로 점검하려면 JSON 검사기를 써 보세요.
변환할 때 값이 바뀌는 경우 — 실제로 돌린 결과
YAML은 따옴표 없는 값을 보고 숫자·참거짓·null인지 스스로 판단해요. 이 도구는 YAML 1.2 core 스키마를 따르는 js-yaml 4.1.1로 읽어요. 아래는 그 판단 때문에 생기는 대표적인 차이예요.
| YAML 입력 | JSON 결과 | 주의할 점 |
|---|---|---|
zip: 0123 | "zip": 123 | 앞자리 0이 사라져요. 우편번호·전화번호·사번은 "0123"처럼 따옴표로 감싸요. |
ver: 1.10 | "ver": 1.1 | 버전 번호가 숫자 1.1이 돼요. "1.10"으로 써야 그대로 남아요. |
oct: 0o14 | "oct": 12 | 0o로 시작하면 8진수예요. |
none: ~ | "none": null | 물결표는 null이에요. |
exp: 1e3 | "exp": 1000 | 지수 표기도 숫자로 읽어요. |
country: no | "country": "no" | YAML 1.2에서는 문자열이에요. 옛 YAML 1.1 파서는 false로 읽어 노르웨이 국가 코드 NO가 false가 되는 문제가 유명했어요. |
d: 2026-10-21 | "d": "2026-10-21T00:00:00.000Z" | 날짜 모양은 날짜로 읽혀 시각까지 붙어요. 글자 그대로 두려면 따옴표로 감싸요. |
반대로 JSON → YAML로 바꿀 때 "1.10", "0123", "yes"처럼 따옴표가 없으면 다른 값으로 읽힐 문자열은 자동으로 작은따옴표를 붙여 줘요. 위 예시 JSON의 "version": "1.10"이 version: '1.10'로 나오는 이유예요.
자주 나는 YAML 오류
| 오류 메시지 | 원인 | 고치는 법 |
|---|---|---|
| tab characters must not be used in indentation | 들여쓰기에 탭 문자를 씀 (YAML은 공백만 허용) | 탭을 공백 2칸으로 바꿔요. 에디터의 '탭을 공백으로' 설정을 켜요. |
| duplicated mapping key | 같은 단계에 같은 키가 두 번 있음 | 하나를 지우거나 이름을 바꿔요. JSON.parse는 뒤 값을 조용히 쓰지만 YAML은 오류로 막아요. |
| bad indentation of a mapping entry | 같은 단계 키들의 들여쓰기 칸 수가 다름, 또는 값에 : 가 또 들어감(a: b: c) | 형제 키는 칸 수를 똑같이 맞추고, 값에 콜론이 있으면 따옴표로 감싸요. |
| end of the stream or a document separator is expected | 콜론 뒤 공백 없이 key:value로 써서 키가 아닌 글자 한 덩어리로 읽힘 | 콜론 뒤에 공백을 한 칸 넣어요. |
| unexpected end of the stream within a flow collection | [, {를 열고 닫지 않음 | 괄호 짝을 맞춰요. |
여러 줄 글과 앵커는 이렇게 바뀌어요
|는 줄바꿈을 그대로 살려 "첫 줄\n둘째 줄\n"이 되고, >는 줄바꿈을 공백으로 접어 "이어지는 한 줄\n"이 돼요(끝 줄바꿈 하나는 남음). 앵커와 병합 키는 JSON에 없는 기능이라 펼쳐서 복사돼요. 예를 들어 base: &b 아래 timeout: 30을 두고 prod에서 <<: *b로 가져오면 JSON에서는 {"base":{"timeout":30},"prod":{"timeout":30,"replicas":3}}처럼 값이 그대로 들어가요.
어디에 쓰나
- 쿠버네티스·도커 컴포즈·GitHub Actions 설정은 YAML이지만, API로 보내거나 코드에서 다룰 때는 JSON이 필요한 경우가 많아요.
- OpenAPI(스웨거) 문서는 YAML과 JSON 둘 다 쓰여서 도구마다 요구하는 형식으로 바꿔야 할 때가 있어요.
- 설정 검토 — YAML의 암묵적인 형 변환(위 표) 때문에 생기는 버그는 JSON으로 바꿔 보면 바로 드러나요. 1.10이 1.1로, 0123이 123으로 바뀌었는지 한눈에 보여요.
세 형식(JSON·YAML·XML)의 차이와 고르는 기준은 JSON·YAML·XML 비교 글에 정리해 두었어요.
변환은 이 브라우저 안에서 오픈소스 라이브러리 js-yaml 4.1.1(MIT 라이선스)로 해요. 붙여 넣은 설정·비밀번호는 저장하거나 밖으로 보내지 않아요. YAML 문법 정의는 YAML 1.2.2 명세, JSON 정의는 RFC 8259에 있어요.