사용 방법
위쪽 탭에서 변환 방향(CSV → JSON 또는 JSON → CSV)을 고르고, 입력칸에 내용을 붙여넣거나 .csv·.tsv·.txt·.json 파일을 끌어다 놓으세요. 파일을 넣으면 확장자에 맞는 방향으로 자동으로 바뀝니다. 결과는 입력에 따라 표시되며, 복사 버튼이나 다운로드 버튼으로 가져갈 수 있습니다. 결과 아래에는 처음 10행을 30열까지 표로 보여 주므로 열이 제대로 나뉘었는지 한눈에 확인할 수 있습니다.
CSV → JSON에서는 첫 줄을 머리글(키)로 쓸지 고를 수 있습니다. 켜 두면 [{"name":"Kim","age":30}] 같은 객체 배열이 되고, 끄면 [["name","age"],["Kim",30]] 같은 배열의 배열이 됩니다. 들여쓰기는 공백 2칸·4칸·탭·한 줄 중에서 고릅니다.
CSV → JSON을 처음 실행할 때 변환 라이브러리(papaparse)를 내려받습니다. JSON → CSV에는 추가 변환 라이브러리가 필요하지 않습니다.
CSV 형식 규칙 (RFC 4180)
CSV에는 여러 변형이 있지만 가장 널리 참고하는 기준은 2005년에 나온 RFC 4180입니다. 핵심 규칙은 다음과 같습니다.
- 한 줄이 레코드 하나이고, 칸은 쉼표로 나눕니다. 첫 줄은 머리글일 수도 있고 아닐 수도 있습니다.
- 칸 안에 쉼표·큰따옴표·줄바꿈이 있으면 그 칸 전체를 큰따옴표로 감쌉니다. 예:
"Seoul, Korea" - 칸 안의 큰따옴표는 두 번 씁니다. 예:
"say ""hi"""는say "hi"입니다. - 공백도 칸의 일부입니다. 앞뒤 공백을 자동으로 지우지 않습니다.
이 도구는 JSON → CSV에서 이 규칙대로 칸을 감싸고(앞뒤에 공백이 있는 칸도 감쌉니다), 줄 끝에는 RFC 4180이 정한 CRLF를 씁니다. CSV → JSON에서 따옴표가 닫히지 않았거나("abc로 끝남) 닫는 따옴표 뒤에 글자가 붙어 있으면("x"y) 결과 대신 몇 번째 줄 부근인지 알려 줍니다. 머리글과 칸 수가 다른 행은 변환은 하되 줄 번호와 함께 경고합니다.
쉼표가 아닌 구분자
“CSV”라는 이름과 달리 쉼표 대신 다른 구분자를 쓰는 파일이 많습니다. Excel은 CSV를 저장할 때 Windows 지역 설정의 목록 구분자를 따르는데, 독일·프랑스·스페인처럼 소수점에 쉼표를 쓰는 지역에서는 1,5 같은 숫자와 겹치지 않도록 세미콜론(;)을 씁니다. 데이터베이스나 스프레드시트에서 복사한 표는 탭으로 나뉜 TSV인 경우가 많고, 로그 파일에는 세로 막대(|)도 쓰입니다.
구분자를 “자동 감지”로 두면 앞부분 20개 레코드(입력의 앞 64KB 안)에서 쉼표·세미콜론·탭·세로 막대가 따옴표 밖에 몇 번 나오는지 세어, 줄마다 개수가 가장 일정한 것을 고릅니다. 감지 결과는 선택칸 아래에 표시되며, 틀렸다면 직접 고르면 됩니다.
숫자·true/false 변환 규칙
CSV의 모든 칸은 글자입니다. “숫자·true/false 변환”을 켜면 JSON에서 쓰기 편하도록 두 가지만 바꿉니다: true·false(대소문자 무관)는 불리언으로, JSON 숫자 문법에 맞는 값은 숫자로 바꿉니다. 그 밖의 값은 모두 글자로 둡니다. +1, .5, 앞뒤에 공백이 붙은 값, null이나 yes라고 적힌 칸이 그렇습니다. 구분자가 쉼표가 아닌 파일에서는 1,5도 글자로 남습니다. 구분자가 쉼표인 파일에서는 따옴표로 감싸지 않은 1,5가 1과 5 두 칸으로 나뉘어 각각 숫자가 됩니다. -5도 숫자가 됩니다. 1E5처럼 지수 표기로 읽히는 값도 숫자(100000)가 되므로, 그런 코드가 있으면 이 옵션을 끄세요.
일부러 바꾸지 않는 값도 있습니다. 앞에 0이 붙은 값(우편번호 01234, 코드 007)은 숫자로 바꾸면 앞의 0이 사라지므로 글자로 둡니다. 0.5처럼 0 하나로 시작하는 소수는 숫자로 바꿉니다. 자바스크립트 숫자로 정확히 나타낼 수 없는 값, 즉 9007199254740991(2^53 − 1)보다 큰 정수와 유효 숫자가 15자리를 넘는 소수도 값이 조용히 바뀌지 않도록 글자로 둡니다. 빈 칸은 null이 아니라 빈 문자열(“”)이 됩니다.
중첩 JSON을 CSV로 펼치는 규칙
CSV는 평평한 표라서 중첩된 JSON을 그대로 담을 수 없습니다. 이 도구는 다음 규칙으로 펼칩니다.
- 중첩 객체는 점 표기 키가 됩니다:
{"address":{"city":"Seoul"}}→ 열address.city - 배열은 펼치지 않고 JSON 글자 그대로 한 칸에 넣습니다:
["a","b"] - null은 빈 칸, 빈 객체는
{}가 됩니다. - 열은 모든 객체의 키를 처음 나온 순서대로 모은 것입니다. 어떤 객체에 없는 키는 빈 칸이 됩니다.
입력은 객체의 배열이 기본이고, 객체 하나는 한 행짜리 표로, 배열의 배열은 각 배열을 그대로 한 행으로 바꿉니다. 원래 키에 점이 들어 있으면("a.b") 같은 객체 안에서 펼친 키와 이름이 겹칠 수 있습니다. 겹치면 그 객체에서 뒤에 적힌 값만 남습니다. {"a":{"b":1},"a.b":2}에서는 a.b 칸이 2가 되고, 두 키의 순서를 바꿔 적으면 1이 됩니다.
최상위 배열의 항목 하나는 안에 무엇이 들어 있든 언제나 한 행입니다. [{"id":1,"items":[{"sku":"A"},{"sku":"B"}]}]는 머리글 id,items 아래 한 행만 되므로, items의 항목마다 한 행을 얻으려면 안쪽 배열 [{"sku":"A"},{"sku":"B"}]만 따로 넣으세요. 이렇게 만든 CSV를 CSV → JSON에 다시 넣어도 원래 구조로 돌아가지 않습니다. items는 배열이 아니라 그 글자가 든 문자열이 되고, address.city 같은 열도 중첩 객체가 아니라 "address.city"라는 키 하나로 남습니다.
Excel에서 한글·일본어가 깨질 때 (BOM)
UTF-8로 저장된 CSV를 Excel에서 두 번 클릭해 열면 한글·일본어나 악센트가 붙은 글자가 알아볼 수 없는 글자로 보일 때가 있습니다. Excel은 파일 맨 앞에 BOM(Byte Order Mark, UTF-8에서는 바이트 EF BB BF)이 있으면 UTF-8로 읽지만, 없으면 컴퓨터의 기본 인코딩으로 읽기 때문입니다. JSON → CSV의 “Excel용 UTF-8 BOM 붙이기”는 다운로드 버튼으로 받는 파일(data.csv, 구분자가 “탭”이면 data.tsv) 앞에 BOM을 붙여 이 문제를 막습니다. 이 옵션은 처음부터 켜져 있습니다. 복사 버튼으로 가져가는 글에는 BOM이 붙지 않습니다.
BOM은 다운로드 파일에만 붙으므로 결과 칸에 보이는 글에는 옵션을 켜도 BOM이 없습니다. BOM 없이 저장된 파일을 이미 가지고 있다면 다시 변환하지 않아도 됩니다. Excel에서 두 번 클릭해 여는 대신 [데이터] → [텍스트/CSV에서]로 가져오세요.
BOM을 첫 머리글의 일부로 읽는 프로그램도 드물게 있으므로, Excel이 아닌 프로그램에 넣을 파일이라면 끄는 편이 안전합니다. 반대로 CSV → JSON에서 파일이나 입력 맨 앞의 BOM은 자동으로 떼고 읽습니다.
