이 변환기가 하는 일과 하지 않는 일
Docker Compose, GitHub Actions, Kubernetes 매니페스트 같은 설정 파일은 YAML로 쓰이고, 프로그램이 주고받는 데이터는 JSON인 경우가 많습니다. 이 도구는 두 칸이 서로 연동되어 한쪽을 고치면 반대쪽이 바로 갱신됩니다. 목표는 사람이 쓰는 단순한 설정 YAML을 구조 그대로 JSON으로 확인하는 것이고, YAML 사양 전체를 구현한 파서가 아닙니다. 지원하는 것은 들여쓰기 매핑(키: 값), 목록(- 값), 목록 안의 매핑, 한 줄짜리 JSON식 배열·객체, 따옴표 문자열, 그리고 숫자·불리언·null입니다. 모든 처리는 브라우저에서만 일어나며 입력은 서버로 보내지 않습니다.
값의 타입은 이렇게 추론합니다
YAML은 따옴표가 없어도 값의 모양으로 타입을 정합니다. 아래 표는 같은 규칙의 함수에 값을 넣어 계산한 결과입니다. 숫자처럼 보이는 문자열이 숫자로 바뀌는 지점, 그리고 다른 파서와 결과가 달라질 수 있는 지점(yes, 0x1F, 날짜 등)을 확인하세요.
| YAML 값 | JSON 결과 | 타입 |
|---|---|---|
true | true | 불리언 |
True | true | 불리언 |
yes | "yes" | 문자열 |
~ | null | null |
null | null | null |
007 | 7 | 숫자 |
1.10 | 1.1 | 숫자 |
1.0 | 1 | 숫자 |
1e3 | 1000 | 숫자 |
+3 | 3 | 숫자 |
.5 | 0.5 | 숫자 |
0x1F | "0x1F" | 문자열 |
1_000 | "1_000" | 문자열 |
2024-01-05 | "2024-01-05" | 문자열 |
'it''s' | "it's" | 문자열 |
"a\tb" | "a\tb" | 문자열 |
[1, 2] | [1,2] | 배열 |
{x: 1} | "{x: 1}" | 문자열 |
[a, b] | "[a, b]" | 문자열 |
12345678901234567890 | 12345678901234567000 | 숫자 |
- 앞자리 0과 소수 끝자리 0이 사라집니다.
zip: 01234는 1234가 되고version: 1.10은 1.1이 됩니다. 우편번호, 전화번호, 버전 문자열은 반드시"01234","1.10"처럼 따옴표로 감싸세요. 이 도구는 이런 줄을 경고로 알려 줍니다(앞자리 0, 16자리 이상 정수). - 큰 정수는 정밀도를 잃습니다. 자바스크립트 숫자는 안전하게 표현할 수 있는 정수가 2의 53제곱 근처(약 9천조)까지이므로 20자리 ID는 끝자리가 달라집니다. ID는 문자열로 두는 것이 안전합니다.
- yes/no/on/off. YAML 1.1을 따르는 라이브러리(대표적으로 PyYAML)는 이 값들을 불리언으로 읽고, YAML 1.2 코어 스키마는 true/false만 불리언으로 봅니다. 이 도구는 1.2 방식으로 문자열로 두므로, 같은 파일을 다른 도구에 넣으면 결과가 다를 수 있습니다. 국가 코드 NO가 false로 읽히는 사고가 이 차이에서 나옵니다.
- 날짜와 16진수.
2024-01-05는 일부 파서가 날짜 타입으로 읽지만 JSON에는 날짜 타입이 없어 이 도구에서는 문자열입니다.0x1F와1_000도 이 도구에서는 숫자가 아니라 문자열로 남습니다. 참고로0x1F같은 16진수는 YAML 1.1과 1.2 코어 스키마 모두 정수(31)로 정의하고,1_000처럼 밑줄이 든 정수는 1.1에서만 숫자(1000)이므로 정식 파서에 넣으면 결과가 다를 수 있습니다. - 콜론이 든 값.
image: nginx:1.25처럼 콜론 뒤에 공백이 없으면 값의 일부입니다(콜론+공백만 키 구분자)."8080:80"은 따옴표로 감싸는 것이 관례인데, 60진수 표기를 쓰는 YAML 1.1 파서는 따옴표 없는22:22처럼 콜론 뒤 숫자가 60 미만인 값을 60진수 정수(1342)로 읽기 때문입니다.
검산한 변환 예시
예시 1. Docker Compose 모양의 중첩 구조. 매핑, 목록, 콜론이 든 값이 모두 의도대로 변환됩니다.
services:
web:
image: nginx:1.25
ports:
- "8080:80"
- 443:443
environment:
- DEBUG=true
db:
image: postgres
↓ JSON
{
"services": {
"web": {
"image": "nginx:1.25",
"ports": [
"8080:80",
"443:443"
],
"environment": [
"DEBUG=true"
]
},
"db": {
"image": "postgres"
}
}
}예시 2. 지원하지 않는 문법이 조용히 틀리는 경우. 앵커(&b)와 별칭(*b)은 해석하지 않으므로 아래 문서는 base가 문자열 "&b"가 되고 그 아래 줄들은 결과에서 빠집니다. 정식 파서라면 base와 use가 모두 {"x": 1}가 되어야 합니다. 이 도구는 이런 경우 "2번째 줄부터 해석하지 못해 결과에서 빠졌습니다"라고 경고합니다.
base: &b
x: 1
use: *b
↓ JSON (틀린 결과)
{
"base": "&b"
}JSON을 YAML로 바꿀 때의 따옴표 규칙
문자열 값을 따옴표 없이 내보내면 YAML로 다시 읽을 때 다른 타입이 될 수 있는 경우에 이 도구가 따옴표를 붙입니다. 아래 표가 그 결과이며, 왕복 변환에서 문자열이 불리언이나 숫자로 변하는 것을 막기 위한 규칙입니다.
| JSON 문자열 | YAML 출력 | 처리 |
|---|---|---|
"hello" | hello | 그대로 |
"한글 값" | 한글 값 | 그대로 |
"yes" | "yes" | 따옴표 추가 |
"on" | "on" | 따옴표 추가 |
"true" | "true" | 따옴표 추가 |
"007" | "007" | 따옴표 추가 |
"1.10" | "1.10" | 따옴표 추가 |
".5" | ".5" | 따옴표 추가 |
"a: b" | "a: b" | 따옴표 추가 |
"tag #1" | "tag #1" | 따옴표 추가 |
"-x" | "-x" | 따옴표 추가 |
"*ref" | "*ref" | 따옴표 추가 |
"line1\nline2" | "line1\nline2" | 따옴표 추가 |
"" | "" | 따옴표 추가 |
키도 같은 규칙입니다. "yes"나 숫자로 시작하는 키, 공백이 든 키는 따옴표가 붙습니다. 반대로 JSON의 null은 YAML null로, 빈 배열·객체는 [], {}로 나갑니다.
지원하지 않는 문법과 대응
- 앵커·별칭·병합 키(
&,*,<<:): 반복되는 설정을 줄이는 문법이지만 펼쳐서 해석하지 않습니다. 앵커를 쓰는 파일은 정식 파서(yq, PyYAML 등)로 펼친 뒤 넣으세요. - 여러 줄 문자열(
|,>): 스크립트나 긴 설명에 흔하지만 이 도구에서는 값이 "|" 한 글자가 되고 뒤따르는 줄이 빠집니다. 해당 값을 한 줄 따옴표 문자열로 바꿔 넣으세요. - 탭 들여쓰기: YAML 사양이 금지하는 방식이며 이 도구도 인식하지 못해 구조가 무너집니다. 스페이스로 바꾸세요. 2칸이든 4칸이든 같은 깊이에서 일관되기만 하면 됩니다.
- 여러 문서(
---): 파일 맨 앞의---는 무시하지만 중간에 문서를 나누는---이후는 변환하지 않습니다. - 목록 안의 목록(
- - x), 여러 줄에 걸친 일반 문자열, 따옴표 없는 플로우 스타일({x: 1},[a, b]): 구조가 아니라 문자열로 남거나 무시됩니다. 플로우 스타일은{"x": 1}처럼 JSON 형태여야 읽힙니다. - 주석: 공백 뒤의
#이후는 주석으로 잘라냅니다. 따옴표 안의#은 보존합니다. JSON에는 주석이 없으므로 YAML에서 JSON으로 바꾸면 주석은 영구히 사라지고, JSON에서 YAML로 되돌려도 복원되지 않습니다. - 중복 키: YAML 사양상 오류지만 이 도구는 마지막 값을 채택합니다. 키 순서는 자바스크립트 객체 규칙을 따라 "1", "2"처럼 정수 모양의 키가 먼저 오름차순으로 정렬될 수 있습니다.
결과를 쓰는 방법
JSON 칸의 결과는 API 요청 본문이나 코드 안의 설정 객체로 바로 옮길 수 있고, 구조가 맞는지는 JSON 포맷터로 다시 검증하면 됩니다. 표 형태 데이터(행과 열)는 CSV-JSON 변환기가 맞습니다. 인코딩이 필요한 값이 있으면 Base64 변환기나URL 인코더를 이어서 쓰세요. 중요한 배포 설정은 이 변환 결과만 믿지 말고 사용하는 도구의 공식 검증 명령(예: 쿠버네티스는 서버 측 dry-run)으로 한 번 더 확인하세요.
자주 묻는 질문
변환 결과가 이상하게 나오면 어떻게 하나요?
먼저 입력 칸 아래의 "확인이 필요한 부분" 경고를 보세요. 줄 번호와 원인(탭, 앵커, 여러 줄 문자열 등)이 표시됩니다. 경고가 없는데 이상하다면 따옴표 없는 값이 숫자나 불리언으로 추론된 것은 아닌지 위 표와 비교해 보세요.
한글 키나 값도 되나요?
네. 키와 값 모두 유니코드 그대로 처리됩니다. JSON에서 YAML로 나올 때도 한글 키는 따옴표 없이 출력됩니다.
JSON이 YAML의 일부라는 말이 사실인가요?
YAML 1.2는 JSON을 거의 포함하도록 설계되어 대부분의 JSON 문서를 YAML로도 읽을 수 있습니다. 다만 이 도구의 YAML 파서는 단순형이라 중첩된 JSON을 한 줄로 쓴 YAML은 해석하지 못할 수 있으므로, JSON은 오른쪽 칸에 넣으세요.
들여쓰기는 몇 칸이어야 하나요?
2칸이든 4칸이든 상관없습니다. 하위 블록의 실제 들여쓰기 폭을 읽어 판단합니다. 같은 부모 아래 형제 항목의 들여쓰기만 정확히 일치하면 됩니다. 탭은 쓰지 마세요. 목록 항목 안에서 이어지는 키는 "- " 뒤 글자와 같은 열에 맞춰야 합니다.
다른 데이터 형식 변환 도구도 있나요?
CSV와 JSON 사이 변환은 CSV-JSON 변환기에서 할 수 있습니다.