필요한 툴을, 바로 쓸 수 있게

JSON ↔ YAML 변환기

JSON 칸이나 YAML 칸 중 한쪽에 붙여 넣으면 반대쪽이 바로 바뀝니다. 어느 칸을 고쳐도 되고, 줄을 고르면 반대쪽에서 같은 값이 있는 줄이 밝아집니다. 쿠버네티스·Docker Compose 파일의 앵커·병합 키·여러 문서도 그대로 읽고, no·on·0755·12:30처럼 YAML 판에 따라 다르게 읽히는 값은 아래 해석 점검에 따로 모아 보여 줍니다.

최종 수정 2026-10-20계산은 브라우저 안에서만 처리
예시
들여쓰기
들여쓰기
해석

입력과 파일은 서버로 보내지 않습니다.

YAML 해석 점검

    최종 수정 2026-10-20입력값은 저장하지 않습니다

    ROBERIN 기준필요한 툴을,
    바로 쓸 수 있게.
    • 바로 보이는 화면입력 위치와 결과 위치를 또렷하게 둡니다.
    • 결과 먼저핵심 결과를 앞에 두고, 과정은 필요할 때만 보여줍니다.
    • 요구 줄이기가입이나 불필요한 정보 입력 없이 바로 쓰게 합니다.

    JSON과 YAML은 같은 자료를 담는 두 가지 표기입니다

    JSON은 객체를 중괄호 { }로, 배열을 대괄호 [ ]로 묶고 키와 글자를 큰따옴표로 감쌉니다. YAML은 같은 구조를 들여쓰기와 줄 앞의 하이픈(-)으로 나타내고, 대부분의 따옴표를 생략합니다. JSON의 객체는 YAML의 매핑이 되고, 배열은 시퀀스가 됩니다. 숫자·참거짓·null도 서로 대응합니다. YAML 1.2 명세는 이 판의 주된 목표가 YAML을 JSON의 엄격한 상위 집합으로 만드는 것이었다고 밝히며, 그래서 올바른 JSON 문서는 대부분 그대로 YAML로도 읽힙니다.

    이 변환기는 두 칸을 모두 편집할 수 있게 열어 두었습니다. JSON 칸을 고치면 YAML 칸이 다시 만들어지고, YAML 칸을 고치면 JSON 칸이 다시 만들어집니다. 가운데 화살표는 지금 어느 칸이 원본인지 가리킵니다. 줄을 클릭하거나 방향키로 옮기면 반대쪽 칸에서 같은 값이 있는 줄이 밝아지고, 아래 경로 줄에 owner › name 같은 위치와 값의 종류가 나옵니다. 들여쓰기만 보고는 어느 항목 아래에 속한 줄인지 헷갈리는 긴 YAML에서 특히 쓸모가 있습니다.

    자료JSONYAML
    객체·매핑{"port": 8080}port: 8080
    배열·시퀀스{"tags": ["web", "api"]}tags:
      - web
      - api
    중첩{"db": {"host": "localhost"}}db:
      host: localhost
    숫자와 숫자 모양 글자{"a": 8080, "b": "8080"}a: 8080
    b: "8080"
    참거짓·빈 값{"on": true, "x": null}"on": true
    x: null
    여러 줄 글자{"memo": "첫 줄\n둘째 줄"}memo: |-
      첫 줄
      둘째 줄
    빈 객체·빈 배열{"a": {}, "b": []}a: {}
    b: []

    JSON과 YAML을 오가야 하는 때

    사람이 고치는 설정 파일은 YAML로, 프로그램끼리 주고받는 자료는 JSON으로 쓰는 경우가 많습니다. 그래서 한 작업 안에서 두 형식을 오가게 됩니다.

    • 쿠버네티스 매니페스트: 쿠버네티스 문서는 설정 파일을 JSON보다 YAML로 쓰라고 권합니다. 둘 다 동작하지만 사람이 읽기 쉽다는 이유입니다. 클러스터에서 JSON으로 받아 본 리소스를 YAML 파일로 고쳐 두거나, 반대로 YAML 매니페스트를 JSON만 받는 API나 스크립트에 넘길 때 변환이 필요합니다.
    • Docker Compose·GitHub Actions: 두 도구 모두 설정을 YAML로만 받습니다. 예제나 API 응답이 JSON으로 되어 있으면 YAML로 옮겨 붙여 넣어야 하고, 이때 따옴표를 빼먹으면 값의 자료형이 바뀔 수 있습니다.
    • 검사와 비교: JSON Schema 검사기나 jq처럼 JSON을 받는 도구로 YAML 설정을 확인하려면 먼저 JSON으로 바꿔야 합니다. 앵커와 병합 키가 많은 Compose 파일은 JSON으로 펼쳐 보면 서비스마다 실제로 어떤 값이 들어가는지 한눈에 보입니다.
    • 읽기 전에 함정 확인: 같은 YAML이라도 읽는 프로그램이 YAML 1.1 방식이면 no가 false로, 0755가 493으로 바뀝니다. 설정을 배포하기 전에 아래 해석 점검에서 그런 값이 있는지 확인할 수 있습니다.

    쓰는 법

    1. JSON이나 YAML 가운데 가지고 있는 쪽 칸에 붙여 넣습니다. 파일 열기 버튼이나 끌어다 놓기로 .json·.yaml·.yml 파일을 열면 확장자에 맞는 칸에 들어갑니다.
    2. 반대쪽 칸에 결과가 바로 나옵니다. 결과 칸을 고치면 그 칸이 원본이 되어 처음 칸이 다시 만들어집니다.
    3. 줄을 고르면 반대쪽에서 같은 값이 있는 줄이 밝아지고, 나란히 놓인 화면에서는 두 줄 사이에 연결선이 그려집니다. 한쪽을 스크롤하면 반대쪽도 같은 위치로 따라갑니다.
    4. 칸 위 옵션에서 들여쓰기(JSON 2칸·4칸·한 줄, YAML 2칸·4칸), YAML 해석 기준(1.2·1.1), 배열을 YAML 문서 여러 개로 나눌지를 고릅니다.
    5. 칸 아래 버튼으로 복사하거나 파일로 저장합니다. 연 파일이 app.yaml이었다면 JSON은 app.json으로 저장됩니다.

    YAML 1.1과 1.2가 다르게 읽는 값

    YAML은 따옴표 없이 쓴 값의 자료형을 글자 모양으로 판단합니다. 그런데 그 규칙이 판마다 다릅니다. YAML 1.2의 Core 스키마는 참거짓을 true·false(대소문자 변형 포함)로만 인정하고, 8진수는 0o로 시작하는 표기만 받습니다. 그보다 앞선 YAML 1.1의 타입 규칙은 yes·no·on·off·y·n을 참거짓으로, 0으로 시작하는 정수를 8진수로, 콜론으로 이은 숫자를 60진수로, 2024-03-01 꼴을 날짜로 읽습니다. 반대로 1.1의 실수 규칙에는 소수점이 있어야 하므로 1e5는 1.1에서 글자가 됩니다.

    문제는 지금도 1.1 방식으로 읽는 프로그램이 많다는 점입니다. 파이썬의 PyYAML은 스스로를 완전한 YAML 1.1 해석기라고 소개합니다. Go의 yaml v3는 1.2를 대부분 따르지만 8진수는 1.1처럼 0777로 읽고 쓰며, yes·no·on·off는 불리언 자료형에 담을 때만 참거짓으로 받아들입니다. 쿠버네티스 문서도 불리언 값에는 true나 false만 쓰고 yes·no·on·off는 쓰지 말라고 하며, 불리언처럼 보이는 값은 따옴표로 감싸라고 권합니다. Docker Compose 문서 역시 포트를 HOST:CONTAINER 형식으로 쓸 때는 YAML 60진수와 충돌하지 않도록 늘 따옴표로 감싼 글자로 쓰라고 안내합니다.

    따옴표 없이 쓴 값YAML 1.2 CoreYAML 1.1JSON → YAML 결과
    true참거짓 true참거짓 true"true"
    yes글자 "yes"참거짓 true"yes"
    no글자 "no"참거짓 false"no"
    on글자 "on"참거짓 true"on"
    NO글자 "NO"참거짓 false"NO"
    y글자 "y"참거짓 true"y"
    ~nullnull"~"
    0755숫자 755숫자 493(8진수)"0755"
    0o17숫자 15(8진수)글자 "0o17""0o17"
    12:30글자 "12:30"숫자 750(60진수)"12:30"
    2222:22글자 "2222:22"숫자 133342(60진수)"2222:22"
    8080:80글자 "8080:80"글자 "8080:80"8080:80
    1e5숫자 1e5글자 "1e5""1e5"
    1_000글자 "1_000"숫자 1000"1_000"
    2024-03-01글자 "2024-03-01"날짜"2024-03-01"

    마지막 열은 JSON에서 글자였던 값을 YAML로 쓸 때의 모양입니다. 두 판 가운데 어느 한쪽에서라도 글자가 아닌 값으로 읽힐 수 있으면 큰따옴표로 감쌉니다. 8080:80은 뒤쪽 80이 60진수 한 자리(0~59)를 넘어 어느 판에서도 글자라서 따옴표가 필요 없지만, 2222:22처럼 뒤가 59 이하인 포트는 1.1에서 숫자가 됩니다.

    YAML 칸이 원본일 때 아래 해석 점검은 문서 안에서 두 판이 다르게 읽는 값을 모두 찾아 줄 번호와 함께 보여 줍니다. 칩을 누르면 그 줄로 이동합니다. 해석 기준을 1.1로 바꾸면 JSON 결과도 1.1 규칙으로 다시 만들어지므로, PyYAML 같은 프로그램이 실제로 받게 될 값을 미리 볼 수 있습니다.

    YAML에만 있는 기능은 이렇게 바뀝니다

    YAMLJSON 결과
    주석 # …담지 않음. 상태 줄에 개수 표시
    앵커 &base와 별칭 *base별칭 자리에 앵커의 값을 펼쳐 넣음
    병합 키 <<: *base가져온 키를 그 매핑에 합침. 직접 쓴 키가 있으면 그 값이 남음
    여러 문서 ---문서 하나가 항목 하나인 배열
    블록 글자 |, >줄바꿈이 \n으로 든 글자(>는 줄을 공백으로 이음)
    사용자 태그 !Ref 등태그를 떼고 값만 옮김. 해석 점검에 표시
    숫자 키 1: a글자 키 "1"
    [ ]·{ }를 키로 쓴 매핑오류. JSON 키는 글자만 됨
    .inf, .nan오류. JSON 숫자에는 무한대와 NaN이 없음

    JSON을 YAML로 바꿀 때는 키 순서를 입력 그대로 지킵니다. 브라우저의 기본 JSON 해석은 "2024"처럼 정수 모양인 키를 객체 맨 앞으로 옮기기 때문에, 이 변환기는 순서를 지키는 자체 해석기로 JSON을 읽습니다. 줄바꿈이 든 글자는 | 블록으로, 빈 객체와 빈 배열은 {}·[]로 씁니다.

    숫자는 쓴 글자 그대로 옮깁니다

    JSON 명세(RFC 8259)는 배정밀도(IEEE 754 binary64)보다 큰 정밀도를 기대하지 않는 구현끼리 숫자를 잘 주고받을 수 있다고 설명합니다. 브라우저도 숫자를 이 방식으로 다루므로, 보통의 변환기는 9007199254740993을 9007199254740992로, 4.50을 4.5로 바꿔 버립니다. 이 변환기는 숫자를 계산하지 않고 쓴 글자를 그대로 옮겨 이런 변화가 없습니다. YAML 쪽 0o17이나 0x1F처럼 JSON에 없는 표기만 같은 값의 10진수로 바꿉니다.

    예외가 하나 있습니다. JSON의 1e5는 YAML 1.2에서는 숫자지만 YAML 1.1에서는 소수점이 없어 글자가 됩니다. 그래서 JSON → YAML에서는 지수 표기를 1.0e+5처럼 소수점과 부호를 넣어 씁니다. 두 판 모두 이 글자를 숫자 100000으로 읽습니다. 해석 점검에 바꿔 쓴 숫자가 표시됩니다.

    자주 틀리는 경우

    • 들여쓰기에 탭: YAML 명세는 시스템마다 탭을 다르게 다루므로 들여쓰기에 탭 문자를 쓰면 안 된다고 정합니다. 편집기에서 탭을 공백으로 바꾸세요.
    • 콜론 뒤 공백: port:8080은 키가 아니라 글자 하나입니다. 키와 값 사이에는 port: 8080처럼 콜론 뒤에 공백이 있어야 합니다.
    • 같은 키 두 번: YAML 명세는 매핑의 키가 유일해야 한다고 정하고, JSON 명세는 이름이 겹친 객체를 받은 프로그램의 동작을 예측할 수 없다고 경고합니다. 이 변환기는 어느 쪽이든 겹친 키를 오류로 알립니다. YAML의 1:과 "1":도 JSON에서는 같은 키라서 겹칩니다.
    • JSON의 느슨한 문법: 마지막 항목 뒤 쉼표, 작은따옴표, 따옴표 없는 키, // 주석은 표준 JSON이 아닙니다. JSON5나 JSONC로 쓴 설정은 이런 부분을 고친 뒤 넣으세요.
    • GitHub Actions의 on:: 워크플로의 on: 키는 YAML 1.2에서 글자 "on"이지만 1.1 방식 해석기에서는 참거짓 true가 됩니다. 워크플로 파일을 파이썬 스크립트로 읽어 고칠 때 키가 사라진 것처럼 보이는 이유입니다.
    • 시간·포트 모양 값: 18:30이나 2222:22는 1.1에서 60진수 숫자가 됩니다. 시간과 포트는 따옴표로 감싸 두는 편이 안전합니다.

    한계와 주의

    • 입력은 5 MB(5,242,880바이트)까지, 결과는 10 MB까지 변환합니다. 파일은 UTF-8(BOM 포함)과 UTF-16 BOM 파일을 엽니다.
    • YAML 주석과 따옴표 모양, 빈 줄은 다시 만들 때 남지 않습니다. YAML을 원본으로 쓰다가 JSON 칸을 고치면 YAML이 새로 써지므로, 주석이 있던 YAML은 상태 줄의 되돌리기로 한 번 되살릴 수 있습니다.
    • CloudFormation의 !Ref 같은 사용자 태그는 떼고 값만 옮깁니다. CloudFormation이 JSON에서 쓰는 {"Ref": …} 꼴로 바꾸지는 않습니다.
    • 별칭을 펼친 양이 지나치게 많으면(별칭 하나가 다시 별칭 묶음을 가리키는 식) 자원 고갈을 막기 위해 멈춥니다.
    • YAML 1.1 해석은 yaml.org의 1.1 타입 규칙을 따릅니다. 실제 1.1 방식 프로그램과 다른 경계도 있습니다. 예를 들어 y·n은 이 규칙에서 참거짓이지만 PyYAML은 글자로 읽습니다. JSON → YAML 결과는 이런 값을 모두 따옴표로 감싸므로 어느 쪽에서 읽어도 글자로 남습니다.
    • 변환은 문법만 다룹니다. 쿠버네티스나 Compose가 요구하는 키 이름과 값의 종류가 맞는지는 각 도구의 검사 명령으로 확인하세요.

    출처

    자주 묻는 질문

    JSON을 YAML로 바꾸면 왜 어떤 값에 따옴표가 붙나요?

    "no", "on", "0012", "18:30", "2024-03-01"처럼 따옴표가 없으면 YAML이 글자가 아니라 참거짓·숫자·날짜로 읽을 값이라서 큰따옴표로 감쌉니다. JSON에서 글자였던 값이 YAML에서도 글자로 남게 하려는 것이며 값 자체는 바뀌지 않습니다.

    YAML 1.1과 1.2는 무엇이 다른가요?

    따옴표 없는 글자의 자료형을 판단하는 규칙이 다릅니다. 1.2 Core 스키마에서 참거짓은 true·false뿐이라 yes·no·on·off는 글자입니다. 1.1은 yes·no·on·off·y·n도 참거짓으로 읽고, 0755를 8진수 493으로, 12:30을 60진수 750으로, 2024-03-01을 날짜로 읽습니다. PyYAML은 YAML 1.1 해석기입니다.

    YAML 주석은 JSON으로 옮겨지나요?

    옮겨지지 않습니다. JSON에는 주석 문법이 없습니다. 상태 줄에 빠진 주석 개수를 보여 주고, YAML을 원본으로 쓰다가 JSON 칸을 고쳐 YAML이 새로 만들어졌다면 되돌리기 버튼으로 원래 YAML을 다시 불러올 수 있습니다.

    앵커(&)와 병합 키(<<)는 어떻게 바뀌나요?

    별칭(*)은 앵커가 가리키는 값으로 펼쳐지고, 병합 키는 가져온 매핑의 키를 그 자리에 합칩니다. 같은 키가 이미 있으면 그 매핑에 직접 쓴 값이 남습니다. JSON에는 참조 문법이 없으므로 같은 값이 쓰인 곳마다 반복해서 들어갑니다.

    ---로 나눈 여러 문서는 어떻게 되나요?

    문서가 둘 이상이면 문서 하나가 항목 하나인 JSON 배열이 됩니다. 반대로 JSON의 맨 바깥 배열은 YAML 칸의 '배열 = 문서(---)' 스위치를 켜면 항목마다 문서 하나로 나눠 씁니다.

    큰 숫자나 4.50 같은 값도 그대로 남나요?

    숫자는 쓴 글자 그대로 옮기므로 9007199254740993 같은 큰 정수나 4.50의 끝자리 0이 바뀌지 않습니다. 다만 1e5 같은 지수 표기는 YAML 1.1에서도 숫자로 읽히도록 1.0e+5로 씁니다. 결과를 읽는 프로그램이 배정밀도 숫자로 바꾸면 큰 정수는 그 프로그램에서 반올림될 수 있습니다.

    오류가 나면 어디를 고쳐야 하나요?

    경로 줄에 오류가 난 칸과 줄·열, 이유가 나오고 그 줄 번호가 강조됩니다. 들여쓰기에 쓴 탭, 콜론 뒤에 빠진 공백, JSON의 마지막 쉼표·작은따옴표·주석이 흔한 원인입니다. JSON 칸에 YAML을 붙여 넣었다면 'YAML 칸으로 옮기기' 버튼이 나옵니다.

    입력한 설정 파일이 서버로 전송되나요?

    아니요. 변환은 브라우저 안에서만 하며 입력 내용과 파일을 서버로 보내지 않습니다. 주소창이나 브라우저 저장소에도 남기지 않으므로 비밀번호나 토큰이 든 설정도 이 화면 밖으로 나가지 않습니다.