본문으로 건너뛰기
jsonbeautifiers
한국어

JSON을 YAML로

Kubernetes, Compose, CI 파일용. 설정을 어디로도 보내지 않습니다.

JSON
YAML

붙여 넣은 것은 여러분의 브라우저를 떠나지 않습니다. connect-src 허용 목록 덕분에 이는 약속이 아니라 브라우저가 강제하는 보장입니다. 직접 확인하기

JSON을 YAML로 변환합니다. 쿠버네티스 매니페스트, Docker Compose 파일, GitHub Actions 워크플로, 그리고 읽기 좋은 형식을 선호하는 그 밖의 모든 것에 쓸 수 있습니다.

YAML은 JSON의 상위 집합이므로 이 방향의 변환은 언제나 성공합니다. 재미있는 쪽은 반대 방향입니다.

무엇이 바뀌고 무엇이 그대로인가

모든 JSON 값에는 YAML 대응물이 있으므로 잃는 것이 없습니다. 객체는 매핑이 되고 배열은 시퀀스가 되며, 키와 단순한 문자열을 감싸던 따옴표는 사라집니다.

다른 것으로 오해받을 수 있는 문자열은 따옴표를 유지합니다. no라는 낱말, yes라는 낱말, 숫자처럼 보이는 것, 날짜처럼 보이는 것이 여기 해당합니다. 덤퍼가 이 부분에서 보수적인 건 일부러 그런 것이고, 그 이유는 "YAML을 JSON으로" 페이지에 있습니다.

큰 정수

YAML에는 임의 정밀도 정수가 있지만, 값은 그래도 도중에 JavaScript를 통과해야 합니다. 2^53-1을 넘는 정수는 자릿수를 잃지 않도록 따옴표를 붙인 문자열로 쓰고, 그렇게 했다는 사실을 변환 결과에서 알려 줍니다. 반올림된 숫자를 조용히 내보내는 쪽이 훨씬 나쁩니다.

줄 너비

줄바꿈은 기본적으로 꺼져 있습니다. YAML 덤퍼는 전통적으로 긴 문자열을 80칸에서 접습니다. 산문에는 괜찮지만 URL, base64 덩어리, 명령줄에는 최악입니다. 접힌 형태는 grep하기도 편집하기도 어렵기 때문입니다. 접지 않은 출력이 거의 모든 사람이 원하는 것입니다.

How to do this in code

코드에서의 변환.

py Python

PyYAML은 기본적으로 키를 정렬해서, 그대로 옮기려던 설정 파일의 순서를 조용히 바꿔 놓습니다.

import json, yaml

data = json.loads(text)
out = yaml.safe_dump(
    data,
    sort_keys=False,        # default is True, which reorders your file
    default_flow_style=False,
    allow_unicode=True,     # otherwise é becomes an escape
    width=10**6,            # effectively no wrapping
)
sh Shell
# yq, the YAML counterpart to jq
yq -P eval . input.json > output.yaml

# Or via Python, with no extra install
python -c 'import sys,json,yaml; yaml.safe_dump(json.load(sys.stdin), sys.stdout, sort_keys=False)' < in.json
js JavaScript
import { dump } from 'js-yaml';

const yaml = dump(JSON.parse(text), {
  lineWidth: -1,    // no wrapping
  noRefs: true,     // no anchors and aliases in the output
});

자주 묻는 질문

YAML이 정말 JSON의 상위 집합인가요?
YAML 1.2는 설계상 그렇습니다. 유효한 JSON 문서는 모두 유효한 YAML입니다. YAML 1.1은 완전히 그렇지는 않았고, 버전이 중요한 이유가 하나 더 생기는 지점입니다.
출력에서 일부 문자열에 따옴표가 붙는 이유는?
따옴표가 없으면 다른 것으로 해석되기 때문입니다. no, yes, on, off, true, null, 맨 숫자, 그리고 날짜처럼 생긴 것은 적어도 일부 YAML 파서에서 문자열로 남으려면 따옴표가 필요합니다. 덤퍼가 여러분 대신 조심하고 있는 겁니다.
반대 방향으로 변환할 때 주석을 유지할 수 있나요?
없습니다. JSON에는 주석 문법이 없어서, 주석이 있는 YAML 파일은 JSON으로 가는 길에 주석을 영구히 잃습니다. 손으로 관리하는 설정 파일을 변환하기 전에 알아 둘 만한 일방통행 문입니다.