MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

YAML JSON 변환기

YAML을 붙여 넣으면 들여쓴 JSON 또는 한 줄 JSON이 나오고, 타입 판정과 앵커, 다중 문서 규칙은 YAML 1.2 로더와 같은 방식으로 적용됩니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

예제

옵션

들여쓰기
문서

---로 구분된 여러 문서가 있는 파일을 배열로 만들지(자동), 항상 배열로 만들지, 첫 문서만 쓸지 정합니다.

YAML 1.1 병합 키: <<: *base는 앵커의 키를 복사하며, 옆에 직접 쓴 키가 우선합니다. 끄면 <<를 일반 키로 둡니다.

YAML 입력

21줄314byte

결과

⌘/Ctrl + Enter로 복사
결과 · data.json
{
  "id": 4821,
  "status": "shipped",
  "customer": {
    "id": 77,
    "name": "Ada Lovelace",
    "email": "ada@example.com",
    "vip": true
  },
  "items": [
    {
      "sku": "KB-100",
      "name": "Keyboard",
      "qty": 1,
      "price": 49.9
    },
    {
      "sku": "MS-220",
      "name": "Mouse",
      "qty": 2,
      "price": 19
    }
  ],
  "total": 87.9,
  "shipped_at": "2026-03-14T09:30:00Z",
  "tracking": null
}
키19
크기436byte

이 YAML JSON 변환기는 yaml 라이브러리의 YAML 1.2 코어 스키마로 텍스트를 읽어 그 값을 JSON으로 씁니다. 입력하는 동안 결과가 바로 갱신되고, 들여쓰기는 공백 2칸, 4칸, 탭, 한 줄 압축 중에서 고를 수 있으며 data.json으로 내려받을 수 있습니다. API 응답, 앵커와 병합 키, 엣지 케이스 세 가지 예제로 동작을 먼저 확인한 뒤 내 파일을 붙여 넣으면 됩니다.

YAML을 JSON으로 바꿀 때 놀라는 지점은 대개 암시적 타입 판정과 JSON에 없는 기능에서 나옵니다. 이 변환기는 루비, 파이썬, 도커 컴포즈처럼 병합 키(<<: *base)를 펼치고, ---로 나뉜 여러 문서를 모두 읽으며, 1.0으로 쓴 숫자는 1.0으로 남기고, .inf나 2^53을 넘는 정수는 몰래 바꾸지 않고 알림과 함께 텍스트로 적습니다.

모든 처리는 브라우저 탭 안에서 이루어지고 서버로 전송되지 않습니다. 입력은 20MiB까지입니다. 20만 자를 넘는 입력은 워커에서 변환하고, 100만 자를 넘으면 편집기 대신 읽기 전용 파일 요약을 보여 주면서 변환을 계속합니다. YAML이 깨져 있으면 오류 메시지에 줄과 열이 나오고 편집기에서 그 줄이 강조됩니다.

사용 방법

  1. YAML 붙여 넣기 또는 예제 불러오기

    텍스트를 붙여 넣거나 .yaml, .yml 파일을 편집기에 끌어다 놓습니다. 예제 칩에서 API 응답, 앵커·병합 키, 엣지 케이스를 고를 수도 있습니다. 주석은 받아들이되 무시합니다.

  2. 문서를 읽는 방식 정하기

    문서 옵션은 세 가지입니다. 자동은 문서 하나면 값 그대로, 여러 개면 배열로 만들고, 항상 배열은 하나뿐인 문서도 배열로 감싸며, 첫 문서만은 첫 문서만 남기고 나머지가 있다는 알림을 보여 줍니다.

  3. 병합 키 펼치기 켜고 끄기

    병합 키(<<) 펼치기는 기본으로 켜져 있습니다. 끄면 <<가 일반 키로 남으며, 엄격한 YAML 1.2 로더가 보는 모습과 같습니다.

  4. JSON 들여쓰기 고르기

    들여쓰기는 공백 2칸, 공백 4칸, 탭, 압축 중에서 고릅니다. 압축은 한 줄로 쓰므로 테스트 픽스처나 명령줄에 쓰기 좋습니다.

  5. 알림 확인 후 복사

    결과 아래의 알림에서 .inf나 아주 큰 정수를 텍스트로 썼는지, 남은 문서를 버렸는지 알려 줍니다. 그다음 JSON을 복사하거나 data.json으로 내려받습니다. 문법 오류가 나면 줄과 열이 표시되고 마지막으로 성공한 결과가 남아 있습니다.

작동 원리

YAML 1.2 코어 스키마의 암시적 타입

따옴표 없는 스칼라는 코어 스키마로 판정합니다. true, True, TRUE는 불리언이고, null, Null, NULL, ~, 빈 값은 null입니다. 정수는 10진수, 0o 8진수, 0x 16진수입니다. 0o17은 15, 0x1F는 31이고, 0123은 YAML 1.2가 옛 0 시작 8진수를 없앴기 때문에 10진수 123입니다.

나머지는 모두 문자열입니다. yes, no, on, off(YAML 1.1에서만 불리언), 2026-10-01 같은 날짜와 타임스탬프, 12:30 같은 시각, 1_000, 0b101이 여기에 들어갑니다. 명시적 코어 태그로 타입을 정할 수도 있어서 !!float 1은 1.0, !!int '7'은 7, !!str 12는 문자열 "12"가 되고, %YAML 1.1에서는 !!bool yes가 true가 됩니다. 텍스트가 아닌 매핑 키는 텍스트로 바뀌어 1은 "1", true는 "true", ~는 "null"이 됩니다. 1과 "1"처럼 서로 다른 YAML 키가 같은 JSON 키가 되면 뒤의 값이 남고 충돌 알림이 표시됩니다.

YAMLJSON비고
yes, no, on"yes", "no", "on"YAML 1.2에서는 일반 문자열
012312310진수이며 8진수는 0o123으로 씀
0o17, 0x1F15, 318진수와 16진수는 숫자로 읽음
~, null, 빈 값null
2026-10-01"2026-10-01"코어 스키마에는 타임스탬프 타입이 없음
1.01.0원문 표기가 기준이라 실수로 남음
1.501.5정수 값인 실수만 원래 모양을 유지
.inf, -.inf, .nan".inf", "-.inf", ".nan"JSON에 없는 숫자라 알림과 함께 텍스트로 씀
9007199254740993"9007199254740993"2^53을 넘으면 정확한 텍스트로 유지하고 알림 표시

앵커, 별칭, 병합 키

*base 같은 별칭은 앵커가 붙은 노드의 전체 복사본으로 바뀌므로 JSON에는 참조가 없습니다. 별칭 100개 제한은 없어서 별칭이 수백 개인 평범한 설정도 변환됩니다. 대신 노드 수가 10만 개와 UTF-8 입력 바이트 수의 2배 중 큰 값을 넘으면 펼치기를 중단해, 앵커마다 앞의 것을 아홉 번씩 반복하는 억 개의 웃음 문서를 오류로 막습니다.

<<: *base 병합 키는 대부분의 로더가 지금도 지원하는 YAML 1.1 관례입니다. 병합 키 펼치기가 켜져 있으면 base의 키가 매핑으로 복사되고, << 옆에 직접 쓴 키가 우선하며, 소스 목록(<<: [*a, *b])에서는 앞쪽 소스가 이깁니다. 스위치를 끄면 <<는 별칭 매핑을 값으로 가진 일반 키로 남습니다.

여러 문서와 숫자 1.0

---로 나뉜 여러 문서는 끝까지 모두 읽습니다. 자동 모드에서는 문서 하나면 그 값, 여러 개면 배열이 되고, 항상 배열은 하나뿐이어도 배열로 만들며, 첫 문서만은 첫 문서만 남기고 버린 문서 수를 알림으로 보여 줍니다. 파일 끝의 ---나 ...는 종료 표시이지 빈 문서가 아니고, 주석만 있는 입력은 null이 됩니다.

JSON만 보면 1.0이 실수를 뜻했는지 알 수 없지만 YAML 원문은 압니다. 변환기는 정수 값인 실수의 원래 모양을 지켜 ratio: 1.0을 "ratio": 1.0으로, 1e3을 1000.0으로 씁니다. YAML CSV 변환기와 YAML XML 변환기도 1.0을 쓴 그대로 적고, TOML과 코드 생성기는 평범한 숫자를 받아 그쪽에서는 1.0이 정수 1이 됩니다.

실제 예시

타입 판정, 실수, JSON이 담지 못하는 값
입력
enabled: yes
count: 0123
octal: 0o17
hex: 0x1F
when: 2026-10-01
ratio: 1.0
price: 1.50
nothing: ~
inf: .inf
big: 9007199254740993
id: "007"
출력
{
  "enabled": "yes",
  "count": 123,
  "octal": 15,
  "hex": 31,
  "when": "2026-10-01",
  "ratio": 1.0,
  "price": 1.5,
  "nothing": null,
  "inf": ".inf",
  "big": "9007199254740993",
  "id": "007"
}

yes는 문자열로 남고, 0123은 123이 되며, 날짜는 텍스트이고 따옴표를 붙인 007은 그대로입니다. 1.0은 1.0으로 남습니다. .inf 값 하나와 2^53보다 큰 정수 하나가 있어서 둘 다 텍스트로 적었다는 알림이 두 개 나옵니다.

앵커, 별칭, 병합 키
입력
base: &base
  host: db
  port: 5432
dev:
  <<: *base
  port: 6543
copy: *base
출력
{"base":{"host":"db","port":5432},"dev":{"host":"db","port":6543},"copy":{"host":"db","port":5432}}

압축 출력입니다. dev는 base의 host를 물려받고, 직접 쓴 port 6543이 물려받은 5432보다 우선합니다. 병합 키 펼치기를 끄면 dev에는 중첩된 "<<" 객체가 들어갑니다.

병합 소스 목록
입력
base: &b {x: 1}
m:
  <<: [*b, {x: 2, y: 3}]
  y: 9
출력
{"base":{"x":1},"m":{"x":1,"y":9}}

x는 목록의 첫 소스가 이기고, << 옆에 쓴 y는 두 번째 소스의 y보다 우선합니다.

여러 문서
입력
a: 1
---
b: 2
---
출력
[{"a":1},{"b":2}]

문서가 둘이라 자동 모드가 배열을 돌려주며, 마지막 ---는 세 번째 문서가 아닙니다. 첫 문서만으로 바꾸면 출력은 {"a":1}이고 문서 1개를 뺐다는 알림이 나옵니다.

블록 스칼라와 텍스트가 아닌 키
입력
msg: |
  line1
  line2
fold: >
  a
  b
"quoted: key": 2
1: y
true: t
~: n
출력
{"1":"y","msg":"line1\nline2\n","fold":"a b\n","quoted: key":2,"true":"t","null":"n"}

리터럴 블록은 줄바꿈을 유지하고 폴디드 블록은 줄을 공백으로 잇습니다. 둘 다 끝의 줄바꿈이 남습니다. 키 1, true, ~는 텍스트가 되고, 자바스크립트가 정수 모양 키를 앞으로 정렬하기 때문에 1이 맨 앞에 옵니다.

억 개의 웃음 문서
입력
a: &a [x, x, x, x, x, x, x, x, x]
b: &b [*a, *a, *a, *a, *a, *a, *a, *a, *a]
c: &c [*b, *b, *b, *b, *b, *b, *b, *b, *b]
d: &d [*c, *c, *c, *c, *c, *c, *c, *c, *c]
e: &e [*d, *d, *d, *d, *d, *d, *d, *d, *d]
f: &f [*e, *e, *e, *e, *e, *e, *e, *e, *e]
g: &g [*f, *f, *f, *f, *f, *f, *f, *f, *f]
출력
YAML 별칭이 너무 많은 값으로 펼쳐져, 100,000개 값과 입력 바이트 수의 두 배 중 더 큰 한도를 넘었습니다. 서로 반복해서 참조하는 앵커가 있는지 확인하세요(별칭 폭탄).

짧은 일곱 줄이 이 입력의 노드 한도인 10만 개를 넘습니다. 변환기는 전체 구조를 펼치기 전에 한도에서 멈춥니다.

자주 하는 실수

  • 앞의 0이 사라짐

    zip: 02134는 2134가 되고 0123은 123이 됩니다. 식별자 값은 "02134"처럼 따옴표로 감싸세요. YAML 1.1 로더라면 0123을 8진수 83으로 읽으므로 도구마다 숫자가 달라지기도 합니다.

  • 병합 키가 내 로더에서도 같은 뜻인지 확인

    루비, 파이썬(PyYAML), 도커 컴포즈는 <<를 펼칩니다. 엄격한 YAML 1.2 라이브러리는 이를 일반 키로 두므로, 병합 키에 기대는 파일이 그쪽에서는 다르게 읽힐 수 있습니다. 엄격한 로더가 무엇을 받는지 보려면 스위치를 끄세요.

  • 무한대와 큰 숫자는 텍스트가 됨

    .inf, -.inf, .nan은 문자열 ".inf", "-.inf", ".nan"이 되고, 2^53을 넘는 정수는 모든 자릿수를 지킨 문자열이 됩니다. JSON 숫자로 쓰면 반올림되거나 깨지므로, 받는 쪽에서 다시 해석해야 합니다.

  • 정수 모양 키는 앞으로 옴

    1 같은 키는 자바스크립트가 정수 모양 키를 객체에서 먼저 정렬하기 때문에 맨 앞에 옵니다. 키 순서가 중요하면 숫자가 아닌 키나 쌍의 배열을 쓰세요.

  • 날짜는 문자열

    2026-10-01이나 2026-03-14T09:30:00Z는 문자열로 남으며, JSON을 받는 쪽에서는 대개 이게 맞습니다. 날짜 객체가 필요하면 코드에서 직접 파싱하세요.

  • 중복 키와 탭은 오류

    한 매핑의 같은 키 두 개나 탭 들여쓰기는 줄과 열이 적힌 메시지와 함께 변환을 멈춥니다. 그 줄을 고치면 JSON이 다시 나타납니다.

자주 묻는 질문

yes가 왜 문자열로 남나요?

변환기가 YAML 1.2 코어 스키마를 쓰기 때문입니다. 이 스키마에서 불리언은 true와 false뿐입니다. PyYAML이나 루비 Psych 같은 YAML 1.1 로더는 yes를 true로 읽으므로 같은 파일이 언어마다 다르게 해석될 수 있습니다. 불리언이 의도라면 true를 쓰세요.

앵커, 별칭, 병합 키를 지원하나요?

네. 별칭은 개수 제한 없이 복사본으로 펼치고 병합 키도 기본으로 펼칩니다. 노드 수가 10만 개와 UTF-8 입력 바이트 수의 2배 중 큰 값을 넘으면 펼치기를 거부합니다.

문서가 여러 개인 파일은 어떻게 되나요?

자동 모드는 문서마다 항목 하나인 배열, 항상 배열 모드는 문서가 하나여도 배열, 첫 문서만 모드는 첫 문서와 알림을 돌려줍니다. 끝의 ---는 문서로 세지 않습니다.

1.0이 1이 아니라 1.0으로 남는 이유가 뭔가요?

YAML 원문이 실수라고 말하고 있으므로 JSON 출력기가 쓴 그대로 적습니다. 이 출력을 YAML TypeScript 변환기 같은 타입 생성기에 쓰는 경우에는 그쪽에서 1.0 하나를 평범한 숫자로 읽습니다.

.inf나 아주 큰 정수는 무엇으로 적히나요?

".inf"나 "9007199254740993" 같은 문자열로 적히고 결과 아래에 알림이 나옵니다. JSON에는 무한대가 없고 2^53을 넘는 숫자는 자릿수를 잃기 때문입니다.

들여쓴 JSON과 압축 JSON 중 고를 수 있나요?

네. 들여쓰기에서 공백 2칸, 공백 4칸, 탭, 압축을 고릅니다. 어느 쪽이든 내려받는 파일 이름은 data.json입니다.

YAML이 업로드되나요?

아니요. 텍스트를 읽고 JSON을 만드는 일이 모두 브라우저 안에서 이루어지며 서버로 전송되지 않습니다. 입력은 20MiB까지입니다.

더 깊이 읽기

마지막 업데이트: