CSV와 JSON 차이와 상호 변환 — 표 데이터 다루기
CSV와 JSON의 구조 차이와 헤더 기반 상호 변환 원리, 쉼표·따옴표 처리 주의점을 예시로 정리합니다.
엑셀에서 내려받은 표를 프로그램에 넣거나, API가 돌려준 데이터를 스프레드시트로 열어보고 싶을 때 마주치는 두 형식이 CSV와 JSON입니다. 같은 표 데이터를 다루지만 생긴 모습과 쓰임새가 달라 서로 변환할 일이 잦습니다. 두 형식의 구조 차이와 헤더를 기준으로 한 변환 원리, 그리고 쉼표·따옴표 때문에 데이터가 깨지는 상황을 정리합니다. 직접 바꿔 보려면 CSV ↔ JSON 변환 도구를 이용하세요.
한눈에 보기
- CSV는 쉼표로 칸을 나눈 텍스트 표이며, 보통 **첫 줄이 헤더(열 이름)**입니다.
- JSON은 키와 값으로 이뤄진 데이터 형식으로, 웹 API·프로그램에서 널리 쓰입니다.
- 표 데이터를 JSON으로 바꾸면 대개 객체 배열 형태가 됩니다. 헤더가 키, 각 행이 하나의 객체입니다.
- 값 안에 쉼표·줄바꿈·따옴표가 있으면 큰따옴표로 감싸고 이스케이프해야 합니다.
- CSV는 엑셀·스프레드시트에, JSON은 웹·프로그램에 강해 둘 사이 변환이 자주 필요합니다.
CSV란
CSV(Comma-Separated Values)는 이름 그대로 쉼표로 칸을 구분한 텍스트 표입니다. 한 줄이 하나의 행(row)이고, 쉼표 하나가 칸과 칸의 경계가 됩니다. 보통 첫 줄에 열 이름을 적는데, 이를 헤더(header)라고 부릅니다.
name,age
홍길동,30
이순신,45
위 예에서 첫 줄 name,age가 헤더이고, 그 아래 두 줄이 실제 데이터 행입니다. 구조가 단순한 순수 텍스트라 엑셀·구글 스프레드시트는 물론 거의 모든 프로그램이 읽을 수 있어, 데이터를 주고받는 공용 형식으로 널리 쓰입니다.
JSON이란
JSON(JavaScript Object Notation)은 키-값 쌍으로 이뤄진 데이터 형식입니다. "키": 값 모양으로 정보를 표현하며, 객체는 중괄호 {}, 목록은 대괄호 []로 묶습니다.
{ "name": "홍길동", "age": "30" }
CSV가 표 한 장처럼 평면적이라면, JSON은 값 안에 또 다른 객체나 목록을 담아 계층 구조를 표현할 수 있습니다. 웹 API의 응답, 설정 파일, 프로그램 간 데이터 교환 등에서 사실상 표준처럼 쓰입니다.
상호 변환 원리
표 데이터를 JSON으로 바꿀 때 가장 흔한 결과는 객체 배열입니다. 헤더의 각 열 이름이 키가 되고, 데이터 행 하나하나가 그 키들을 가진 객체 하나로 바뀝니다.
| 단계 | CSV | JSON |
|---|---|---|
| 헤더 | name,age | 키 → "name", "age" |
| 1행 | 홍길동,30 | {"name":"홍길동","age":"30"} |
예를 들어 name,age\n홍길동,30 는 다음과 같이 바뀝니다.
[{ "name": "홍길동", "age": "30" }]
반대로 JSON을 CSV로 되돌릴 때는 객체들의 키를 모아 헤더 한 줄을 만들고, 각 객체의 값을 같은 순서로 줄마다 늘어놓습니다. 핵심은 헤더(키)와 값의 순서를 일치시키는 것입니다.
주의점
변환에서 데이터가 깨지는 원인은 대부분 특수 문자 처리입니다.
- 값 안의 쉼표: 칸을 나누는 쉼표와 헷갈리지 않도록, 값을 큰따옴표로 감쌉니다. 예:
"서울, 강남". - 값 안의 줄바꿈: 한 칸 안에 줄바꿈이 들어가도 큰따옴표로 감싸면 한 칸으로 인식됩니다.
- 값 안의 따옴표: 큰따옴표 자체를 표현하려면 큰따옴표를 두 번 써서 이스케이프합니다(
""). - 숫자처럼 보이는 값: CSV는 모든 칸이 텍스트라
30같은 값도 변환 시 문자열("30")로 들어가는 경우가 많습니다. 숫자로 다뤄야 한다면 변환 후 따로 처리합니다.
이런 규칙을 손으로 일일이 챙기기는 번거롭습니다. CSV ↔ JSON 변환 도구를 쓰면 헤더 인식과 따옴표 처리를 자동으로 해 줍니다.
자주 묻는 질문
CSV 첫 줄이 항상 헤더인가요?
대부분 첫 줄을 헤더(열 이름)로 쓰지만, 헤더 없이 데이터만 담긴 파일도 있습니다. 변환할 때 첫 줄을 헤더로 볼지 여부를 미리 확인하는 것이 좋습니다.
값 안에 쉼표가 있으면 어떻게 되나요?
칸 구분 쉼표와 섞이지 않도록 그 값을 큰따옴표로 감싸야 합니다. 예: "서울, 강남구"처럼 감싸면 쉼표가 있어도 한 칸으로 유지됩니다.
JSON을 CSV로 바꾸면 계층 구조는 어떻게 되나요?
CSV는 평면적인 표라 중첩된 객체나 목록을 그대로 담기 어렵습니다. 보통 한 단계로 펼치거나 일부 정보를 합쳐서 표현하므로, 깊은 구조의 JSON은 변환 시 정보가 단순해질 수 있습니다.
숫자가 문자열로 바뀌는 이유는 무엇인가요?
CSV는 모든 칸을 텍스트로 취급하기 때문입니다. 30도 변환 과정에서 "30"처럼 문자열로 들어가는 경우가 많아, 계산에 쓰려면 변환 뒤 숫자로 다시 바꿔야 합니다.
마무리
CSV는 표를 다루는 도구에, JSON은 웹과 프로그램에 강합니다. 헤더가 키가 되고 각 행이 객체가 된다는 원리만 이해하면 두 형식 사이를 오가는 일이 어렵지 않습니다. 값 안의 쉼표·줄바꿈·따옴표만 주의하면 됩니다. 표 데이터를 바로 바꿔 보고 싶다면 CSV ↔ JSON 변환 도구를 활용해 보세요.
🧰 관련 도구
관련 글
JSON 포맷터 사용법과 자주 나는 오류
JSON 작성 규칙과 정렬·압축의 차이, 작은따옴표·트레일링 콤마 같은 흔한 오류와 해결법을 정리했습니다. JSON 포맷터로 바로 검증해 보세요.
텍스트 음성 변환(TTS)이란? 원리와 똑똑한 활용법
글자를 음성으로 읽어주는 TTS의 원리와 브라우저 음성 합성(Web Speech API), 교정·접근성·외국어 발음 등 활용법을 정리합니다.
CSS box-shadow 완전 정복 — 그림자 값 5가지 이해
box-shadow의 가로·세로 오프셋·번짐(blur)·확산(spread)·색과 inset, 여러 그림자 겹치기를 예시 코드로 정리합니다.