본문으로 건너뛰기
Case Converter Online
ko

JSON YAML 변환기

JSON을 붙여넣으면 깔끔한 YAML이 나오고, 방향을 바꾸면 YAML을 JSON으로 바꿉니다. 변환은 입력하는 동안 브라우저에서 이루어집니다.

JSON을 붙여넣거나 예시를 누르세요. 변환은 브라우저에서 실행됩니다.

JSON과 YAML: 같은 데이터, 다른 표기

JSON과 YAML은 같은 것을 표현할 수 있습니다. 객체(YAML에서는 매핑), 리스트, 문자열, 숫자, 불리언, null입니다. JSON은 중괄호, 대괄호, 따옴표, 쉼표를 쓰고, YAML은 들여쓰기와 대시를 씁니다. 그래서 YAML이 더 짧고 사람이 직접 읽고 고치기 쉽습니다. Kubernetes, Docker Compose, GitHub Actions, Ansible이 설정에 YAML을 쓰고, API는 주로 JSON으로 주고받는 이유입니다.

둘 사이를 오갈 일은 자주 생깁니다. API가 JSON을 돌려주는데 그 내용을 설정 파일에 넣고 싶을 때, 또는 YAML 설정을 JSON만 읽는 프로그램에 넘겨야 할 때입니다. 이 JSON YAML 변환기는 두 방향을 모두 처리합니다.

사용 방법

  1. JSON → YAML 또는 YAML → JSON 버튼으로 방향을 고릅니다.
  2. 왼쪽 입력란에 데이터를 붙여넣거나, 파일 열기 또는 예시를 누릅니다. 입력하는 동안 오른쪽에 결과가 나타납니다.
  3. 들여쓰기를 공백 2칸이나 4칸으로 고릅니다. YAML을 JSON으로 바꿀 때는 압축 옵션도 있습니다.
  4. JSON을 YAML로 바꿀 때 키를 알파벳순으로 정렬하려면 키 A-Z 정렬을 켭니다.
  5. 복사를 누르거나, 다운로드로 .yaml 또는 .json 파일을 저장합니다.

방향을 바꾸면 현재 결과가 입력란으로 옮겨지므로, 왕복 변환해서 결과가 같은지 확인할 수 있습니다.

JSON을 YAML로 바꾼 예시

{"name":"web-app","version":3,"private":true,"ports":[80,443],"database":{"host":"localhost","password":null},"tags":["api","v2"]}

다음과 같이 바뀝니다.

name: web-app
version: 3
private: true
ports:
  - 80
  - 443
database:
  host: localhost
  password: null
tags:
  - api
  - v2

한글 키와 값도 따옴표 없이 그대로 나옵니다. 이 도구로 {"이름":"김민준","도시":"서울","메모":"예: 테스트"}를 변환하면 이름: 김민준, 도시: 서울 다음 줄에 메모: "예: 테스트"가 나옵니다. 값 안에 콜론과 공백이 있으면 아래 설명처럼 따옴표가 붙습니다.

안전한 따옴표 처리

어떤 문자열은 YAML 파서에게 다른 타입처럼 보입니다. 변환기는 이런 값을 따옴표로 감싸 문자열로 유지합니다. 이 JSON은

{"zip":"02134","enabled":"yes","version":"1.10","note":"a: b","empty":""}

다음과 같이 바뀝니다.

zip: "02134"
enabled: "yes"
version: "1.10"
note: "a: b"
empty: ""

따옴표가 없으면 02134는 앞자리 0을 잃고, 1.10은 숫자 1.1이 되며, 오래된 YAML 1.1 파서(PyYAML과 많은 CI 도구가 이 규칙을 따릅니다)는 yes를 true로 읽습니다. 변환기는 더 엄격한 따옴표 규칙을 따르므로 결과가 오래된 파서와 새 파서에서 똑같이 읽힙니다. "2024-01-15" 같은 날짜도 같은 이유로 따옴표가 붙습니다.

YAML을 JSON으로 바꾼 예시

# App settings
name: web-app
ports:
  - 80
  - 443
debug: false
retries: 3
owner: ~

다음과 같이 바뀝니다.

{
  "name": "web-app",
  "ports": [
    80,
    443
  ],
  "debug": false,
  "retries": 3,
  "owner": null
}

JSON에는 주석이 없으므로 주석은 사라졌고, ~는 YAML에서 null을 줄여 쓴 표기입니다.

병합 키도 풀어 줍니다. 이런 Rails 스타일 파일은

defaults: &defaults
  adapter: postgres
  host: localhost
development:
  <<: *defaults
  database: dev_db

다음 결과가 됩니다.

{
  "defaults": {
    "adapter": "postgres",
    "host": "localhost"
  },
  "development": {
    "adapter": "postgres",
    "host": "localhost",
    "database": "dev_db"
  }
}

---로 구분된 두 문서(예: kind: Service와 kind: Deployment)는 배열 하나가 됩니다. 압축 옵션을 고르면 [{"kind":"Service"},{"kind":"Deployment"}]로 나옵니다.

값을 읽는 규칙

YAML을 JSON으로 바꿀 때는 YAML 1.2 규칙을 씁니다. 이 규칙에서 yes, no, on은 일반 문자열이고, 불리언은 true와 false뿐이며, 날짜는 문자열로 남습니다. 이 입력은

a: yes
b: no
c: on
d: true
e: 010
f: 0o10
g: 1e3
h: 2024-01-15

압축하면 다음과 같이 변환됩니다.

{"a":"yes","b":"no","c":"on","d":true,"e":10,"f":8,"g":1000,"h":"2024-01-15"}

010은 10으로 읽히고, 0o10은 8을 뜻하는 8진수라는 점에 주의하세요.

값을 반드시 텍스트로 남겨야 한다면 YAML에서 따옴표로 감싸세요.

깔끔한 왕복 변환을 위한 팁

  • JSON을 YAML로 바꿨다가 다시 JSON으로 바꾸면 데이터는 같지만 텍스트까지 항상 같지는 않습니다. 키 A-Z 정렬을 켜지 않으면 키 순서는 유지됩니다.
  • YAML의 주석, 앵커, 사용자 정의 태그는 JSON에 대응하는 것이 없습니다. 앵커는 데이터 전체 복사본으로 펼쳐집니다.
  • 20자리 ID처럼 아주 큰 정수는 브라우저가 지원하는 경우 JSON을 YAML로 바꿀 때 정확히 유지됩니다. YAML을 JSON으로 바꿀 때는 자바스크립트 숫자를 거치므로 긴 ID는 따옴표로 감싼 문자열로 저장하세요.
  • 파일은 기기에 그대로 남습니다. 아무것도 업로드되지 않습니다.

오류

실수가 있으면 줄과 열을 알려 주고, 입력에서 보기를 누르면 그 위치로 이동합니다. JSON에 끝 쉼표가 있으면 3행 1열: "}" 앞에는 후행 쉼표를 쓸 수 없습니다라는 메시지가 나옵니다. YAML에서 키가 중복되면 YAML 라이브러리의 영어 메시지 Map keys must be unique가 나오고, YAML은 공백만 허용하므로 탭으로 들여쓰기한 경우에도 오류가 납니다.

다른 변환 방법

yq. Go 버전 yq는 명령줄에서 변환합니다. JSON도 올바른 YAML이므로 JSON을 입력으로 읽을 수 있고, 두 형식 중 어느 쪽으로든 출력합니다.

Python. PyYAML 패키지를 쓰면 yaml.safe_dump(json.load(f))로 JSON 파일에서 YAML을 만듭니다. PyYAML은 YAML 1.1을 따르므로 yes, no 같은 문자열을 확인하세요. 한글이 \uXXXX로 바뀌지 않게 하려면 allow_unicode=True도 함께 넘기세요.

VS Code. 선택한 부분을 JSON과 YAML 사이에서 바꿔 주는 명령을 추가하는 확장이 여럿 있습니다.

관련 도구

변환 없이 YAML 파일만 정리하려면 YAML 포매터를 쓰세요. JSON을 먼저 검사하거나 정리하려면 JSON 포매터를, 스프레드시트 데이터라면 CSV JSON 변환기부터 시작하세요.

JSON YAML 변환기 자주 묻는 질문

YAML에서 일부 값이 따옴표로 감싸지는 이유는 무엇인가요?

YAML 파서가 다른 타입으로 읽을 수 있는 문자열에는 따옴표가 붙습니다. "02134"는 숫자 2134가 되고, "yes"는 오래된 파서에서 true가 됩니다. 따옴표로 감싸면 텍스트로 남으므로 YAML이 JSON과 정확히 같은 뜻을 유지합니다.

YAML을 JSON으로 바꾸면 주석은 어떻게 되나요?

JSON에는 주석이 없으므로 사라집니다. 다시 YAML로 바꿔도 주석은 돌아오지 않습니다. 주석이 중요하다면 원본 YAML 파일을 보관해 두세요.

YAML 문서가 여러 개 든 파일도 변환할 수 있나요?

네. ---로 구분된 문서들은 같은 순서대로 문서 하나당 항목 하나씩 JSON 배열이 됩니다.

앵커와 병합 키도 지원하나요?

네. *defaults 같은 별칭은 가리키는 데이터로 바뀌고, <<: *defaults로 쓴 병합 키는 Docker Compose나 Rails가 기대하는 방식대로 해당 매핑에 합쳐집니다.

데이터가 업로드되나요?

아니요. 두 방향 모두 브라우저에서 실행됩니다. 붙여넣거나 연 내용은 어디로도 전송되지 않습니다.

코드와 데이터 도구 더 보기

전체 도구 보기