사용 방법
위쪽 탭에서 변환 방향(JSON → YAML 또는 YAML → JSON)을 고르고 입력창에 붙여넣으면 결과가 표시됩니다. JSON → YAML에서는 들여쓰기(공백 2칸·4칸)와 키 정렬을, YAML → JSON에서는 들여쓰기(공백 2칸·4칸·탭)와 여러 문서를 배열로 묶을지를 고를 수 있습니다. 결과는 복사하거나 .yaml·.json 파일로 내려받을 수 있습니다. ’파일 열기’로 .json·.yaml·.yml 파일을 불러오면 확장자에 맞춰 변환 방향이 정해집니다. 방향을 바꾸면 방금 만든 결과가 입력창으로 옮겨져 되돌려 변환해 볼 수 있습니다. 입력이 올바르지 않으면 결과 대신 몇 행 몇 열에서 문제가 생겼는지와 그 주변 코드를 보여 줍니다.
처음 변환할 때 yaml 라이브러리를 내려받습니다.
JSON과 YAML의 관계
두 형식 모두 객체(매핑)·배열(시퀀스)·문자열·숫자·불리언·null로 데이터를 나타냅니다. JSON은 중괄호·대괄호·큰따옴표로 구조를 표시하고, YAML은 주로 들여쓰기와 -·:로 표시해 사람이 읽고 고치기 쉽습니다. 2009년에 나온 YAML 1.2는 YAML을 JSON의 엄격한 상위 집합으로 만드는 것을 주된 목표로 삼았습니다. 그래서 올바른 JSON은 거의 언제나 YAML로도 읽히고, YAML → JSON 모드에 JSON을 넣어도 변환됩니다. 반대 방향은 성립하지 않습니다. 주석·앵커·여러 문서처럼 JSON에 없는 기능은 JSON으로 옮길 때 사라지거나 펼쳐집니다.
변환할 때 달라지는 것
- 주석: JSON 문법(RFC 8259)에는 주석을 적을 자리가 없어서 YAML → JSON 변환에서 모두 빠집니다. YAML 명세도 주석은 표현 방식일 뿐 데이터에 영향을 주지 않는다고 정합니다. 설명을 남겨야 한다면 변환하기 전에
_comment: "staging port"처럼 키와 문자열 값으로 적어 두세요. 결과에는"_comment": "staging port"로 들어갑니다.#이 있다고 모두 주석인 것은 아닙니다.http://a.com/#frag처럼 앞에 공백이 없는#과 따옴표 안의#은 값의 일부로 남습니다. 주석만 있는 입력은 ’변환할 YAML 문서가 없습니다. 주석만 있는지 확인하세요.’라는 오류가 납니다. - 앵커·별칭(
&name,*name): 가리키는 값을 복사해 펼칩니다. 별칭이 기하급수로 늘어나는 이른바 ‘10억 번 웃음(billion laughs)’ 공격을 막으려고, 별칭이 지나치게 많이 펼쳐지면 변환을 멈춥니다(yaml 라이브러리의 기본 한도maxAliasCount100). 공격이 아닌 정상 파일도 한 앵커를 별칭으로 100번 가리키면 같은 오류로 멈춥니다(99번까지는 변환되고, 값의 크기는 상관없으며,<<병합도 한 번으로 셉니다). 별칭이 든 값을 다시 별칭으로 가리키면 횟수가 곱해져 더 일찍 멈춥니다. 그럴 때는 그 앵커를 가리키는 별칭 일부를 실제 값으로 바꾸세요. - 병합 키(
<<): YAML 1.2 스키마에는 없지만 docker compose 같은 설정 파일이 널리 쓰므로 YAML 1.1 병합 규칙대로 펼칩니다. - 여러 문서(
---): YAML → JSON에서 ’여러 문서(—)를 배열로 묶기’가 켜져 있으면(기본값) 문서마다 요소 하나씩인 JSON 배열로 바꾸고, 결과 쪽에 ’문서 3개’처럼 문서 수를 보여 줍니다. 끄면 첫 문서만 바꾸고, 나머지 문서 수를 경고로 알려 줍니다. 문서가 하나뿐이면 이 옵션과 상관없이 배열로 감싸지 않습니다. 파일 끝에 내용 없이---만 남아 있으면 빈 문서로 세어 배열 끝에null이 하나 붙으니, 필요 없으면 그 줄을 지우세요. JSON → YAML은 최상위가 배열이어도---문서로 나누지 않고 언제나 문서 하나로 씁니다. - 키 순서: YAML과 JSON 모두 명세상 객체의 키에는 순서가 없지만, 이 도구는 입력 순서를 그대로 지킵니다(
"2"처럼 숫자 모양의 키도 앞으로 옮기지 않습니다). JSON → YAML에서 ’키 정렬’을 켜면 모든 객체의 키를 유니코드 코드 유닛 순서로 정렬합니다. - 태그:
!Ref처럼 이 도구가 모르는 태그는 떼어 내고 값만 옮기며 경고를 보여 줍니다. 이때 태그가 붙은 값은3·true처럼 적어도 문자열이 되고, 태그가 붙은 배열·객체는 구조와 안의 값을 그대로 옮깁니다. - JSON에 없는 값:
.inf·.nan은 JSON에 없어서null로 바꾸고 경고합니다. 배열이나 객체를 키로 쓴 YAML은 그 키를 JSON 글자로 바꿉니다. - 중복 키: YAML에서 한 매핑에 같은 키가 두 번 나오면 명세 위반이라 오류로 알립니다. JSON에서 같은 키가 두 번 나오면 브라우저의
JSON.parse처럼 마지막 값만 남기고 경고합니다.
노르웨이 문제: yes·no·on·off
YAML 1.1에서는 y·yes·on·n·no·off(대소문자 변형 포함)까지 불리언으로 읽었습니다. 그래서 나라 코드 목록에 노르웨이 NO를 따옴표 없이 적으면 false로 바뀌는 일이 생겼고, 이를 흔히 ’노르웨이 문제’라고 부릅니다. YAML 1.2 코어 스키마는 불리언을 true·false(와 True·TRUE처럼 대문자로 쓴 형태)로 좁혔고, 이 도구도 이 기준으로 읽기 때문에 NO·yes·off는 문자열로 남습니다. YAML 1.1 방식으로 읽는 옵션은 없으니, 불리언으로 받아야 하는 값은 YAML에서 true나 false로 고쳐 적으세요. tRue처럼 대소문자를 섞어 쓴 값은 문자열이고, "true"처럼 따옴표로 감싼 값도 문자열입니다.
하지만 아직 YAML 1.1 규칙으로 읽는 도구도 있습니다. 그래서 JSON → YAML 결과에서는 1.1 파서가 다른 값으로 읽을 수 있는 문자열에 큰따옴표를 붙입니다. 불리언 모양의 값(yes·no·on·off·y·n 등), 날짜 모양(2026-09-28), 60진수 모양(1:20), 밑줄이 든 숫자 모양(1_000), 병합 키 <<가 여기에 해당합니다. 따옴표로 감싼 값은 1.1과 1.2 어느 쪽에서도 문자열입니다.
큰 정수와 숫자 정밀도
자바스크립트의 숫자는 IEEE 754 배정밀도라 2^53 - 1(9007199254740991, 16자리)을 넘는 정수는 끝자리가 바뀔 수 있습니다. 이 도구는 두 방향 모두 정수를 BigInt로 다뤄 64비트 ID 같은 큰 정수도 자릿수 그대로 옮깁니다. JSON → YAML에서는 1.0 같은 끝자리 0도 입력대로 둡니다. YAML → JSON에서는 1.0이 1이 됩니다.
YAML → JSON에서는 따옴표 없이 적은 01234가 정수로 읽혀 1234가 되고, 마찬가지로 1.10은 1.1, 0x1F는 31, 0o14는 12가 됩니다. 우편번호·버전·코드처럼 적은 그대로 남아야 하는 값은 YAML에서 "01234"처럼 따옴표로 감싸세요. 그러면 JSON에서도 문자열로 나옵니다. JSON → YAML은 "01234"나 "12345678901234567890" 같은 숫자 모양 문자열에 따옴표를 붙여 쓰므로, 다시 읽어도 문자열입니다.
소수는 두 방향 모두 배정밀도 숫자로 다루므로, 0.1234567890123456789처럼 유효숫자가 많은 소수는 어느 방향에서나 가장 가까운 배정밀도 값으로 반올림됩니다. 지수 표기로 쓴 숫자는 모양이 바뀝니다. JSON → YAML에서는 1e3이 1e+3으로, YAML → JSON에서는 1e3이 1000으로 나옵니다. 배정밀도 범위를 넘는 1e400 같은 값은 JSON → YAML에서 .inf가 됩니다. 결과 JSON을 받는 프로그램이 큰 정수를 일반 숫자로 읽으면 그쪽에서 정밀도를 잃을 수 있으니, 정확한 값이 중요하면 원본에서 문자열로 두는 편이 안전합니다.
이런 때 씁니다
- Kubernetes 매니페스트: 관례상 YAML로 쓰지만 JSON도 받으며, kubectl은 API로 보낼 때 매니페스트를 JSON 등으로 바꿉니다. API 응답(JSON)을 매니페스트(YAML)로 옮기거나 그 반대로 볼 때 씁니다.
- GitHub Actions 워크플로:
.github/workflows폴더의.yml·.yaml파일로, YAML 문법을 씁니다. 스크립트가 만든 JSON 설정을 워크플로에 옮길 때 편합니다. - docker compose: 기본 파일 이름이
compose.yaml이고, 앵커·별칭과 병합 키(<<)로 서비스 설정을 재사용합니다. YAML → JSON으로 바꾸면 병합이 펼쳐진 최종 값을 한눈에 볼 수 있습니다.
