GrepBoardTools GrepBoard 매뉴얼 ↗ Log ↗

Tools / 텍스트·인코딩

JSON · YAML 정리 · 변환

{"a":1} 같은 JSON 이나 debug: no 같은 YAML 을 붙여 넣고 결과 형식을 고릅니다.

입력한 값은 브라우저 안에서만 계산하고 서버로 보내지 않습니다.

무엇을 하나

  • JSON: 공백 2 · 4 · 탭으로 들여쓰거나 한 줄로 줄입니다(Python json.dumps 와 같은 꼴). 숫자는 원문 그대로 두어 12345678901234567890 같은 큰 정수나 1.50 의 자릿수를 잃지 않습니다. 문법 오류는 줄 · 열을 Python json 과 같은 자리로 알려 줍니다.
  • YAML → JSON: 문법은 검증된 라이브러리 yaml(ISC)이 읽고, 따옴표 없는 값의 해석은 고른 판의 규칙을 따릅니다 — 1.2 는 스펙의 core 스키마, 1.1 은 PyYAML 과 같은 규칙(병합 키 << 포함). 두 판이 다르게 읽는 값은 표로 보입니다.
  • JSON → YAML: 어느 판으로 읽어도 글자가 글자로 남도록 "no" · "0777" · "2001-12-14" 같은 값은 따옴표로 감쌉니다. 결과는 내보내기 전에 다시 읽어 값이 같은지 확인합니다.

YAML 의 함정

따옴표 없는 값YAML 1.2YAML 1.1(PyYAML)
no · on글자 "no" · "on"false · true
0777777511(8진수)
0o1715글자 "0o17"
2001-12-14글자날짜 — JSON 에는 날짜가 없어 원래 글자로 씀
1:20글자80(60진수)
1_000글자1000
1e31000.0글자 "1e3"(1.1 의 소수는 점이 있어야 함)
y글자글자(PyYAML) — 1.1 스펙 표에는 불리언이라 쓸 때는 감쌈

나라 코드 NO(노르웨이)가 false 가 되는 일이 이 표의 첫 줄입니다. 설정 파일을 PyYAML 같은 1.1 파서가 읽는다면 1.1 을 골라 확인합니다.

어떻게 확인했나

공개 전에 244가지를 대조해 모두 맞았습니다: JSON 25개 × (공백 2 · 4 · 한 줄 · 키 정렬) = Python json.dumps(ensure_ascii=False) 100가지(숫자 원문을 지킨 2개와 짝 없는 서로게이트 1개는 값으로 비교), 깨진 JSON 32개의 오류 줄 · 열 = Python json, YAML 35개를 1.1 로 바꾼 결과 = PyYAML 6.0.3 safe_load(오류가 나는 입력은 PyYAML 도 오류이거나 JSON 으로 못 바꾸는 값), 같은 YAML 의 1.2 해석 = yaml 라이브러리 core 스키마 34가지, JSON → YAML 25개를 PyYAML · ruamel.yaml 0.19.1 이 다시 읽은 값 = 원래 값, 위 함정 표 18가지.

흔한 실수

  • 끝의 쉼표 [1, 2,] · 작은따옴표 {'a': 1} · 주석 — JSON 에서는 모두 오류입니다.
  • YAML 들여쓰기에 탭 — YAML 은 들여쓰기에 탭을 쓰지 못합니다.
  • 큰 ID 를 JSON.parse 로 읽기 — 2⁵³ 을 넘는 정수는 반올림됩니다. 문자열로 주고받습니다.
  • 같은 키를 두 번 쓰기 — JSON 파서는 대개 뒤의 값을 쓰지만 YAML 은 금하고, 오류로 멈추는 파서도 있습니다.

자주 묻는 것

어느 YAML 판을 골라야 하나요?

그 파일을 읽는 프로그램을 따릅니다. Python 의 PyYAML 은 1.1, JavaScript 의 yaml 은 1.2 입니다. 섞인 것도 있습니다 — ruamel.yaml 0.19 는 1.2 가 기본이지만 2001-12-14 를 날짜로, 1_000 을 1000 으로 읽었습니다(공개 전 실측). 다른 라이브러리는 그 문서를 확인합니다. 어느 쪽이 읽을지 모르면 위 함정 표에 나온 값을 따옴표로 감싸 두는 것이 안전합니다.

CloudFormation 의 !Ref 같은 태그는 왜 바꾸지 않나요?

JSON 에는 태그가 없어 어떻게 바꿔도 원래 뜻을 잃습니다. 짐작해서 바꾸는 대신 그 위치를 오류로 알려 줍니다.

붙여 넣은 내용이 서버로 가나요?

아니요. 계산은 모두 브라우저 안에서 하고 입력값은 주소창이나 브라우저 저장소에 쓰지 않습니다. 이 사이트가 쓰는 방문 통계와 광고에도 넘기지 않습니다. 자세한 것은 개인정보 처리 안내에 있습니다.