CSV, JSON, YAML
세 가지 형식이 세상의 구조화된 데이터 대부분을 담고 있습니다. 서로 변환하기는 쉽지만, 아무것도 조용히 망가뜨리지 않으며 변환하려면 약간의 주의가 필요합니다.
게시
각각의 용도
CSV는 표입니다. 행과 열뿐 다른 것은 없습니다. 어디서나 읽을 수 있고 매우 작지만 중첩된 것은 표현할 수 없습니다. JSON은 트리입니다. 배열 안의 객체, 객체 안의 배열 구조이며 거의 모든 웹 API가 쓰는 형식입니다. YAML은 JSON과 같은 구조를 중괄호 대신 들여쓰기로 표현하므로 사람이 읽고 편집하기 훨씬 편하며, 설정 파일이 YAML로 옮겨 간 이유이기도 합니다.
자료형 강제 변환의 함정
실제로 사람들에게 손해를 끼치는 것이 바로 이것입니다. CSV에는 텍스트만 있어서 값을 숫자, 날짜, 문자열로 표시할 방법이 없습니다. 그래서 변환기가 추측하고, 그 추측은 자주 틀립니다.
01234같은 우편번호는 숫자1234가 되어 앞의 0이 사라집니다.1-2같은 제품 코드는 날짜가 됩니다.- 긴 계좌번호는 부동소수점이 되어 마지막 자릿수를 잃습니다.
- 북미(North America)를 뜻하는
NA가 "사용 불가(not available)"가 됩니다.
이 모두가 아무 알림 없이 일어납니다. 그래서 신중한 CSV-JSON 변환은 모든 값을 문자열로 두고 판단은 사용자에게 맡겨야 하며, 이 사이트의 변환기가 의도적으로 그렇게 합니다. 처음에는 지나치게 꼼꼼해 보일 수 있습니다.
CSV로 옮기면 살아남지 못하는 것
중첩 구조입니다. 평평한 객체의 JSON 배열은 깔끔한 표가 됩니다. 값 자체가 객체나 배열인 순간 넣을 열이 없습니다. 선택지는 복합 키로 평탄화하거나, 중첩된 부분을 셀 안의 텍스트로 직렬화하거나, 버리는 것입니다. 이 중 조용히 버리는 것이 최악입니다. 셀 안에 JSON 텍스트로 다시 써 두면 적어도 데이터를 복구할 수 있습니다.
YAML의 날카로운 모서리
YAML은 읽기 좋지만 유난히 실수하기 쉽습니다.
- 들여쓰기가 곧 구조이며 탭은 허용되지 않습니다. 잘못 둔 공백 하나가 오류를 내는 대신 의미를 바꿉니다.
- 일부 맨 단어는 불리언입니다. 오래된 YAML에서는
y,n,on,off,yes,no가 모두 true 또는 false로 해석되므로, 노르웨이를 뜻하는NO가 든 국가 열은false가 됩니다. 따옴표로 감싸세요. - JSON으로 변환하면 주석이 사라집니다. JSON에는 주석을 표현할 방법이 없기 때문입니다.
왕복 변환은 보장되지 않습니다
JSON을 YAML로 바꿨다가 되돌리면 보통 처음 상태로 돌아옵니다. CSV를 JSON으로 바꿨다가 되돌리면 보통 그렇지 않습니다. 따옴표 스타일, 모양이 다른 레코드의 열 순서, 빈 값의 표현은 모두 선택의 문제이고 도구마다 다르게 선택합니다. 왕복 결과가 정확해야 한다면 가정하지 말고 직접 확인하세요.
서로 옮기려면 CSV를 JSON으로 변환, JSON을 CSV로 변환, JSON을 YAML로 변환을 이용하세요. 왕복 변환이 항상 정확하지는 않으므로 결과를 확인하세요.