YAML JSON 변환 — YAML을 JSON으로 바꾸기
YAML을 JSON으로 변환 (안전한 스키마, 앵커·병합 키 해석, 오류 줄 표시)
브라우저에서 처리 · 서버로 전송되지 않음
소개
설정 파일은 YAML로, 프로그램이 주고받는 데이터는 JSON으로 되어 있는 경우가 많습니다. 이 도구는 YAML을 JSON으로 바꿔 줍니다. 입력하는 즉시 결과가 바뀌고, 문법 오류는 줄과 열로 알려 줍니다.
사용법
- YAML을 입력 칸에 붙여 넣습니다.
- 들여쓰기를 2칸, 4칸, 탭 중에서 고르거나 압축을 고릅니다.
- 결과를 복사합니다.
- 오류 메시지에 줄과 열이 나오면 그 근처의 들여쓰기, 따옴표, 콜론 뒤 공백을 확인하세요.
기준
- 파싱은 js-yaml로 하며 YAML 1.2 코어 스키마를 씁니다.
true/false,null(또는~), 10진·8진·16진 정수, 실수만 숫자·불리언·null로 해석하고 나머지는 문자열입니다. 따옴표로 감싼"123"은 항상 문자열입니다. - 사용자 정의 태그와
!!js/function같은 코드 태그는 지원하지 않고 오류가 됩니다. 어떤 값도 코드로 실행되지 않습니다. - 앵커(
&)와 별칭(*)은 값으로 풀어 쓰고, 병합 키<<도 해석합니다. 같은 키가 두 번 나오면 오류로 처리합니다. - 별칭(
*)은 한 문서에 100개까지만 허용합니다. 별칭을 겹겹이 펼쳐 결과를 폭발적으로 키우는 “alias bomb”를 막기 위한 제한이며, 결과 JSON이 약 5MB를 넘거나 자기 자신을 가리키는 순환 참조가 있으면 친절한 오류로 멈춥니다. - 오류 위치는 1부터 센 줄과 열입니다.
- 여러 문서는 배열로 묶습니다. 비어 있는 입력은 오류입니다.
- JSON으로 표현할 수 없는 값은 JSON 규칙대로 바뀝니다. 예를 들어
.inf나.nan은null이 됩니다. 2^53을 넘는 정수는 JavaScript 숫자로 읽을 때 반올림됩니다.
예시
입력:
base: &b
x: 1
item:
<<: *b
이름: 홍길동
결과:
{"base": {"x": 1}, "item": {"x": 1, "이름": "홍길동"}}
참고
- YAML의 주석(
#)은 JSON에 없는 개념이라 변환하면 사라집니다. - 들여쓰기에는 탭 문자를 쓸 수 없고 공백만 허용됩니다. 탭이 섞인 파일은 오류가 납니다.
- 설정 파일에서 쓰는
key: value뒤의 공백, 문자열 속 콜론(:) 같은 자주 하는 실수는 따옴표로 감싸면 해결되는 경우가 많습니다.
자주 겪는 경우
- 숫자처럼 보이는
08,1_000,0o17같은 값은 YAML 1.2 규칙에 따라 해석되므로 예상과 다른 값이 나올 수 있습니다. 문자열로 유지하려면 따옴표로 감싸세요. - 여러 줄 문자열은
|(줄바꿈 유지)와>(줄을 공백으로 접기) 기호로 쓰며, 결과 JSON에서는\n이 들어간 문자열 하나가 됩니다. - 값이 없는 키(
key:)는null이 됩니다. 빈 문자열을 원하면key: ""로 적으세요. - 최상위가 목록(
- a)이면 JSON 배열이 되고, 값 하나만 있어도 변환됩니다. - 쿠버네티스 매니페스트처럼
---로 이어 붙인 파일은 문서마다 하나씩 배열 요소가 됩니다.
활용 팁
- 쿠버네티스 매니페스트나 OpenAPI 명세처럼 YAML로 작성된 문서를 JSON만 받는 도구에 넣어야 할 때 쓰면 편합니다. 변환한 JSON을
jq로 가공하는 방법도 흔합니다. - 앵커와 별칭, 병합 키로 중복을 줄여 둔 CI 설정 파일을 변환하면 모든 값이 풀려 나와서 실제로 어떤 값이 적용되는지 확인하기 좋습니다.
- 변환된 JSON은 들여쓰기를 압축으로 바꾸면 환경 변수나 API 요청 본문에 그대로 넣기 쉽습니다.
- 오류가 계속 난다면 문제 줄을 따로 잘라 작은 입력으로 다시 시험해 보세요. 어느 줄에서 깨지는지 좁히기 쉽습니다.
- 입력이 매우 커도 변환은 브라우저 안에서만 이뤄지며, 조금 긴 입력은 잠시 기다린 뒤 결과가 갱신됩니다. 모든 처리가 로컬이라 비밀값이 들어 있어도 서버로 나가지 않습니다.
더 알아두면 좋은 점
- 따옴표 없는 값은 모두 YAML 규칙에 따라 해석되므로
1.0은 숫자(JSON에서는1로 출력),1.0.0은 문자열이 됩니다. 버전 번호처럼 숫자로 읽히면 곤란한 값은 따옴표로 감싸 두세요. - 키 순서는 입력한 순서를 그대로 지키지만, 정수형 키는 JavaScript 객체 규칙 때문에 맨 앞으로 올 수 있습니다.
- 들여쓰기 칸 수는 YAML 구조에 영향을 주지만 JSON 출력 옵션은 모양만 바꿀 뿐 값은 같습니다.
08은 숫자 8로,0o17은 8진수 15로 읽히고1_000은 문자열로 남는 등 YAML 1.2의 숫자 표기가 예상과 다를 수 있으니, 아이디나 코드처럼 숫자가 아닌 값은 따옴표를 쓰세요.- 주석에 적어 둔 설명은 변환 후 사라집니다. 설명이 필요한 값은 JSON의 별도 필드로 옮겨 두는 것이 좋습니다.
- 별칭이 100개를 넘거나 결과가 약 5MB를 넘는 입력은 브라우저를 보호하기 위해 변환하지 않습니다. 그럴 때는 별칭을 줄이거나 파일을 나눠서 변환하세요.
추가 예시
| YAML | JSON 결과 |
|---|---|
a: yes |
{"a":"yes"} (YAML 1.2에서는 문자열) |
a: ~ |
{"a":null} |
a: [1, 2] |
{"a":[1,2]} |
a: | 다음 줄 x |
{"a":"x\n"} |
a: .inf |
{"a":null} (JSON에는 무한대가 없음) |
결과가 기대와 다르면 값에 따옴표를 붙여 보세요. 따옴표로 감싼 값은 항상 문자열이라 YAML의 자동 타입 판별에서 벗어납니다.
옵션을 바꿔도 입력을 다시 붙여 넣을 필요 없이 결과가 바로 바뀌므로, 사용할 용도에 맞게 압축이나 들여쓰기를 번갈아 선택해 보세요.
자주 묻는 질문
YAML에 !!js/function 같은 태그가 있으면 실행되나요?
아니요. 이 도구는 일반 데이터(문자열, 숫자, 불리언, null, 배열, 객체)만 읽는 안전한 스키마를 씁니다. 사용자 정의 태그나 함수는 실행하지 않고 오류로 표시합니다.
YAML 오류는 어디서 확인하나요?
오류가 나면 문제가 감지된 줄과 열 번호를 라이브러리의 오류 설명과 함께 보여 줍니다. 들여쓰기가 어긋나거나 따옴표·괄호를 닫지 않았을 때 흔히 발생하며, 감지된 위치가 실제 원인 줄의 바로 뒤일 수 있으니 앞쪽도 함께 살펴보세요.
yes, no, on, off는 불리언으로 바뀌나요?
아니요. YAML 1.2 규칙을 따라 true와 false만 불리언으로 읽고 yes, no, on, off는 문자열로 남깁니다. 날짜처럼 보이는 2024-01-02도 날짜 객체가 아니라 문자열 그대로 나옵니다.
별칭(*)이 너무 많다는 오류가 나요.
보안을 위해 한 문서에 별칭을 100개까지만 허용합니다. 별칭을 중첩해 결과를 기하급수적으로 부풀리는 입력(alias bomb)은 브라우저를 멈추게 할 수 있어서, 별칭 개수와 결과 크기(약 5MB)를 제한합니다. 일반적인 설정 파일은 이 한도에 걸리지 않습니다.
문서가 여러 개(---로 구분)면 어떻게 되나요?
문서가 하나면 그 값을, 둘 이상이면 문서들을 순서대로 담은 JSON 배열을 만들고 몇 개였는지 안내합니다.