변환이 생각보다 자주 손실 있음
주석은 대개 사라져
JSON 에는 주석이 없어. 그래서 YAML 을 JSON 으로 바꾸면 주석이 통째로 날아가. 반대 방향은 깨끗해. 잃을 주석이 애초에 없었으니까. TOML 을 YAML 로 옮길 땐 양쪽 파서가 주석 보존을 지원하면 (YAML 쪽에 ruamel.yaml 을 쓴다든지) 살릴 수 있는데, 기본 도구들은 안 해줘.
키 순서가 바뀌어
JSON spec 은 객체 키에 순서가 없다고 못 박아. 요즘 파서는 대부분 넣은 순서를 지켜주지만, 일부 라이브러리는 그냥 알파벳 순으로 다시 늘어놔. Python 의 json.dumps 기본값이나 몇몇 YAML emitter 가 그래. 여기서 diff 노이즈가 터져. 아무것도 안 바꾼 포맷 변환인데 갑자기 모든 줄이 바뀐 것처럼 보이거든.
YAML 1.1 을 거치면서 타입이 바뀌어
Norway 문제가 여기서 또 나와. JSON 의 {"country": "NO"} 를 YAML 1.1 로 바꿨다가 다시 읽으면 {"country": false} 가 돼 있어. YAML 로 내보낼 때 위험한 값은 무조건 따옴표로 감싸거나, YAML 1.2 emitter 를 쓰겠다고 명시해.
숫자 정밀도
JSON 파서의 253 절벽도 그대로 따라와. YAML 이나 TOML 에서 253 을 넘는 정수를 JS 기반 도구로 JSON 에 옮기면 아무 말 없이 반올림될 수 있어.
Anchor 와 alias 가 무너져
YAML anchor 는 내보낼 때 전부 펼쳐져. 소스에서는 '진짜 값은 한 군데' 였던 구조가 JSON 이나 TOML 출력에서는 똑같은 사본 N 개가 되는 거야. 그 JSON 을 YAML 로 되돌려도 anchor 가 다시 생기지는 않아. 구조 정보 자체가 사라진 거니까.