사용 방법
- 변환 방향을 고르고 왼쪽 칸에 CSV나 JSON을 붙여 넣으면 바로 변환됩니다. 버튼을 누를 필요가 없습니다.
- 구분자는 첫 줄을 보고 자동으로 고르며, 쉼표·탭·세미콜론·파이프 중에서 직접 지정할 수도 있습니다. 엑셀에서 표를 복사해 붙여 넣으면 칸이 탭으로 구분되므로 탭을 고르거나 자동 감지에 맡기면 됩니다.
- 첫 줄이 열 이름이면 결과는 객체 배열이 되고, 끄면 배열의 배열이 됩니다.
- 결과는 복사하거나 파일로 저장할 수 있습니다. CSV로 저장할 때는 줄바꿈 종류와 BOM을 고를 수 있습니다.
따옴표 규칙 (RFC 4180)
CSV에서 어려운 부분은 값 안에 구분자나 줄바꿈이 들어 있는 경우입니다. 표준은 그런 값을 큰따옴표로 감싸고, 값 안의 큰따옴표는 두 번 겹쳐 쓰도록 정합니다. 그래서a,"b,c",d는 네 칸이 아니라 세 칸이고, 따옴표 안의 줄바꿈은 줄을 나누지 않습니다. 줄 단위로 자르거나 쉼표로 나누는 방식(split)으로는 이 규칙을 지킬 수 없어 이 도구는 글자 하나씩 읽는 파서를 직접 씁니다. 아래 표는 이 페이지를 만들 때 실제 파서가 내놓은 결과입니다.
| 입력 한 줄 | 나뉜 칸 | 칸 수 |
|---|---|---|
a,b,c | ["a","b","c"] | 3 |
a,"b,c",d | ["a","b,c","d"] | 3 |
"그는 ""안녕"" 했다" | ["그는 \"안녕\" 했다"] | 1 |
a,"b
c",d | ["a","b\nc","d"] | 3 |
"1,000",2 | ["1,000","2"] | 2 |
a,,b | ["a","","b"] | 3 |
줄바꿈은 CRLF·LF·CR 세 가지를 모두 받아들이고, 값 안의 줄바꿈은 LF 하나로 통일합니다. 맨 앞에 BOM이 있으면 제거하고, 파일 끝의 빈 줄과 중간의 빈 줄은 건너뜁니다. 다만 따옴표로 감싼 빈 값("")만 있는 줄은 사람이 일부러 넣은 값이므로 남겨 둡니다.
엑셀에서 한글이 깨지는 이유와 BOM
엑셀은 CSV 파일을 열 때 인코딩을 스스로 판단합니다. UTF-8로 저장한 한글 파일인데 아무 표시가 없으면 윈도우 기본 인코딩으로 읽어 버려 글자가 깨집니다. 이를 막는 관행이 파일 맨 앞에 UTF-8 BOM(U+FEFF, 바이트로는 EF BB BF)을 붙이는 것입니다. BOM이 있으면 엑셀이 UTF-8임을 알아보고 한글을 그대로 엽니다. 그래서 이 도구는 CSV로 저장할 때 BOM을 붙일지 고를 수 있게 했습니다. 엑셀에서 열 파일이라면 켜 두고, 다른 프로그램에서 읽을 파일이라면 끄는 편이 안전합니다. BOM을 지우지 않는 프로그램이 첫 열 이름을 이름 대신 BOM+이름으로 읽어 열을 찾지 못하는 일이 있기 때문입니다. 반대로 CSV를 읽을 때는 맨 앞의 BOM을 항상 제거하고 알려 줍니다.
값 종류 변환
CSV에는 값의 종류가 없어 모든 칸이 글자입니다. 숫자 변환을 켜면 숫자·true·false·null을 JSON 값으로 바꾸지만, 다시 글자로 썼을 때 원문과 똑같아지는 값만 바꿉니다. 사번 007이나 전화번호처럼 앞의 0이나 기호가 중요한 값이 조용히 망가지는 것을 막기 위한 규칙입니다. 빈 칸은null이 아니라 빈 문자열로 둡니다.
| CSV 칸 | 변환 켜기 | 변환 끄기 |
|---|---|---|
1 | 1 | "1" |
-42 | -42 | "-42" |
3.14 | 3.14 | "3.14" |
true | true | "true" |
false | false | "false" |
null | null | "null" |
(빈 칸) | "" | "" |
007 | "007" | "007" |
1e3 | "1e3" | "1e3" |
9007199254740993 | "9007199254740993" | "9007199254740993" |
010-1234-5678 | "010-1234-5678" | "010-1234-5678" |
TRUE | "TRUE" | "TRUE" |
변환 예시
| CSV 입력 | JSON 결과 |
|---|---|
이름,부서,메모 홍길동,영업1팀,"서울, 강남구 2층 근무" 김영희,개발팀,"별명은 ""영희 대리""" | [
{
"이름": "홍길동",
"부서": "영업1팀",
"메모": "서울, 강남구\n2층 근무"
},
{
"이름": "김영희",
"부서": "개발팀",
"메모": "별명은 \"영희 대리\""
}
] |
반대 방향에서는 객체마다 키가 달라도 모든 키를 모아 열을 만들고, 그 객체에 없는 키는 빈 칸으로 둡니다. 아래 예시에서 첫 객체에는 부서가 없고 둘째 객체에는 사번이 없지만 열은 이름, 사번, 부서 세 개가 됩니다.
| JSON 입력 | CSV 결과 |
|---|---|
[
{ "이름": "홍길동", "사번": "007" },
{ "이름": "김영희", "부서": "개발팀" }
] | 이름,사번,부서 홍길동,007, 김영희,,개발팀 |
알아 둘 점
- 객체·배열이 들어 있는 칸은 표에 담을 수 없어 JSON 글자 그대로 넣습니다. 표는 칸 안에 다시 표를 담지 못합니다.
null은 빈 칸으로 저장합니다. CSV에는 값이 없음과 빈 글자를 구분하는 방법이 없어, 다시 JSON으로 바꾸면 빈 문자열이 됩니다.- 열 이름이 겹치면 뒤쪽에
_2를 붙입니다. JSON 객체는 같은 키를 두 번 가질 수 없습니다. - 한 번에 다룰 수 있는 양은 5MB, 10만 줄, 1,000열까지입니다. 그보다 크면 오류로 알려 줍니다.
붙여 넣은 데이터는 서버로 전송되지 않습니다. 모든 변환은 브라우저 안에서만 일어나고, 파일로 저장하기도 브라우저가 직접 만든 파일을 내려받는 방식입니다. 오류 메시지에는 몇 번째 줄 몇 번째 칸이 잘못됐는지만 담고 입력한 값은 담지 않습니다.