viewer.csslab.dev

YAML ↔ JSON 변환기

YAML 과 JSON 을 서로 바꾼다. 파싱이 안 되면 파서가 짚은 줄을 그대로 보여준다.

YAML 이란?

YAML 은 사람이 쓰고 읽으라고 만든 데이터 형식이다. 구조를 괄호가 아니라 들여쓰기로 나타내고, 문자열에 대개 따옴표가 필요 없으며, 주석을 쓸 수 있다. JSON 의 상위집합이라 유효한 JSON 은 모두 유효한 YAML 이다. 설정 파일·CI 파이프라인·쿠버네티스 매니페스트에서 둘이 늘 함께 나오는 이유다.

이 변환기는 YAML 을 JSON 으로, JSON 을 YAML 로 바꾸며 입력하는 동안 검증한다. 문서가 파싱되지 않으면 파서의 메시지를 그대로 보여준다. 거기 줄 번호가 있기 때문이다 — YAML 오류의 답은 거의 언제나 들여쓰기이고, 오류 문장을 다시 쓰는 것보다 위치가 중요하다.

YAML is a data serialization language designed to be human friendly and work well with modern programming languages.
YAML 1.2.2 명세 1장

기능

양방향
설정을 API 나 테스트에 넣으려면 YAML → JSON, API 응답을 사람이 관리할 형태로 만들려면 JSON → YAML.
줄을 짚는 오류
파서의 메시지를 고치지 않고 보여준다. YAML 오류에서 쓸모 있는 부분은 줄 번호이고, 원인은 거의 항상 들여쓰기다.
진짜 YAML 파서
앵커·별칭·여러 줄 블록 스칼라·다중 문서를 정규식 흉내가 아니라 완전한 YAML 1.2 구현이 처리한다.
아무것도 업로드되지 않는다
배포 매니페스트와 CI 설정에는 호스트 이름, 버킷 이름, 내부 서비스 구조가 들어 있다. 모든 파싱이 브라우저에서 일어난다.

사용법

  1. 1

    방향을 고른다

    YAML → JSON 또는 JSON → YAML.

  2. 2

    문서를 붙여넣는다

    입력하는 동안 변환 결과가 따라 바뀐다.

  3. 3

    파서가 짚은 자리를 고친다

    파싱이 실패하면 메시지에 줄 번호가 나온다. 거기 들여쓰기부터 본다 — 탭과 어긋난 중첩이 YAML 실패의 대부분이다.

  4. 4

    결과를 복사한다

    변환된 문서를 클립보드로 가져간다.

자주 묻는 질문

JSON 은 유효한 YAML 인가?

그렇다. YAML 1.2 는 JSON 의 엄격한 상위집합이라 유효한 JSON 문서는 YAML 로 파싱되고 같은 데이터를 낸다. 반대는 성립하지 않는다 — YAML 에는 JSON 이 표현할 수 없는 주석·앵커·따옴표 없는 문자열이 있다.

YAML 이 파싱되지 않는다

거의 항상 들여쓰기다. YAML 은 들여쓰기에 탭을 금지하고, 한 블록 안에서 간격이 일정해야 하며, 콜론 뒤에 공백이 없으면 그것까지 키로 본다. *, &, % 같은 문자로 시작하는 값도 따옴표가 필요하다.

버전 번호가 다른 값으로 바뀌었다

따옴표 없는 스칼라는 패턴으로 타입이 정해진다. 1.10 같은 값은 숫자 1.1 이 되고, YAML 1.1 파서에서는 yes·no·on·off 가 불리언이 된다 — 국가 코드 NO 가 false 로 바뀌는 이른바 "노르웨이 문제"다. 문자열로 남아야 하는 값은 따옴표로 감싼다.

YAML 에서 앞자리 0 을 유지하려면?

따옴표로 감싼다. 따옴표 없는 03187 은 숫자로 읽혀 0 이 사라지고, "03187" 은 문자열로 남는다. 우편번호·전화번호·버전 문자열이 모두 마찬가지다.

앵커나 다중 문서도 되나?

된다. 완전한 YAML 1.2 파서를 쓰므로 앵커와 별칭이 해석되고 블록 스칼라가 보존된다. JSON 으로 바꿀 때는 앵커가 펼쳐진다 — JSON 에는 참조를 표현할 방법이 없기 때문이다.

설정이 어디론가 전송되나?

아니다. 파싱과 직렬화 모두 브라우저에서 일어나고, 이 페이지에는 받을 백엔드가 없다.

이 도구가 따르는 규격

  • YAML 1.2.2 명세YAML 이 JSON 의 엄격한 상위집합임을, 그리고 파싱 실패의 대부분을 만드는 들여쓰기 규칙을 정의한다.
  • YAML 1.2.2 §2.1 — 컬렉션들여쓰기에 탭을 금지하는 이유.
  • RFC 8259 — JSON변환의 반대편. JSON 으로 바꿀 때 앵커를 펼쳐야 하는 이유이기도 하다.

함께 쓰는 도구