JSON-CSV 변환 완벽 가이드
데이터 작업을 하다 보면 JSON과 CSV 형식 간의 변환이 필요한 순간이 자주 찾아옵니다. API에서 받아온 JSON 데이터를 엑셀로 분석하고 싶거나, 기획자가 정리한 CSV 파일을 개발에 활용해야 할 때가 대표적입니다. 이 가이드에서는 두 형식의 특성을 이해하고, 실무에서 바로 적용할 수 있는 변환 기법을 알아봅니다.
1. JSON과 CSV의 차이점
두 형식의 차이점을 이해하면 어떤 상황에서 어느 형식이 적합한지 판단할 수 있습니다.
JSON (JavaScript Object Notation)
JSON은 계층적(nested) 데이터 구조를 표현할 수 있는 범용 데이터 형식입니다.
[
{
"id": 1,
"name": "홍길동",
"department": {
"id": 10,
"name": "개발팀"
},
"skills": ["JavaScript", "Python"],
"active": true
}
]
JSON의 특징:
- 중첩 구조(객체 안의 객체, 배열 안의 배열) 지원
- 문자열, 숫자, 불리언, null, 배열, 객체 등 다양한 타입
- API 통신의 표준 형식
- 사람이 읽기 쉬운 구조
CSV (Comma-Separated Values)
CSV는 데이터를 행(row)과 열(column)로 표현하는 평면적(flat) 형식입니다.
id,name,department,active
1,홍길동,개발팀,true
2,김철수,기획팀,false
3,이영희,디자인팀,true
CSV의 특징:
- 2차원 표(테이블) 구조만 표현 가능
- 엑셀, Google Sheets와 완벽 호환
- 어떤 프로그래밍 언어에서도 쉽게 파싱 가능
- 데이터베이스 임포트/엑스포트의 표준 형식
언제 어떤 형식을 쓸까?
| 상황 | 권장 형식 |
|---|---|
| API 개발 및 통신 | JSON |
| 엑셀 분석 및 보고서 | CSV |
| NoSQL 데이터베이스 | JSON |
| 관계형 DB 임포트 | CSV |
| 복잡한 중첩 데이터 | JSON |
| 단순한 표 형태 데이터 | CSV |
2. JSON → CSV 변환 실무 가이드
JSON을 CSV로 변환할 때는 몇 가지 중요한 규칙이 있습니다.
변환 가능한 JSON 구조
올바른 형태: 객체의 배열(Array of Objects)
[
{"name": "홍길동", "age": 30, "city": "서울"},
{"name": "김철수", "age": 25, "city": "부산"},
{"name": "이영희", "age": 28, "city": "인천"}
]
위 JSON은 아래 CSV로 변환됩니다:
name,age,city
홍길동,30,서울
김철수,25,부산
이영희,28,인천
변환 시 주의사항
1. 중첩 구조 평탄화(Flatten)
중첩된 JSON은 직접 CSV로 변환할 수 없습니다. 먼저 평탄화가 필요합니다.
// 변환 불가: 중첩 구조
[{"user": {"name": "홍길동", "age": 30}, "city": "서울"}]
// 평탄화 후 변환 가능
[{"user_name": "홍길동", "user_age": 30, "city": "서울"}]
2. 배열 필드 처리
// skills가 배열 → CSV로 표현 어려움
[{"name": "홍길동", "skills": ["JS", "Python"]}]
// 해결책: 문자열로 합치거나 별도 컬럼으로 분리
[{"name": "홍길동", "skills": "JS,Python"}]
3. 특수문자가 포함된 값
쉼표, 큰따옴표, 줄바꿈이 포함된 값은 자동으로 따옴표 처리됩니다:
name,address
홍길동,"서울시 강남구, 테헤란로 123"
단계별 변환 과정
- JSON 배열 전체를 입력 (배열의 첫 번째 객체 키들이 헤더가 됨)
- 구분자 선택 (기본: 쉼표)
- 헤더 포함 여부 설정
- 변환 버튼 클릭
- CSV 복사 또는 파일 다운로드
3. CSV → JSON 변환 실무 가이드
엑셀이나 스프레드시트 데이터를 API나 개발에 활용할 때 CSV를 JSON으로 변환합니다.
기본 변환 예시
입력 CSV:
name,age,department,salary
홍길동,30,개발팀,5000000
김철수,25,기획팀,4500000
이영희,28,디자인팀,4800000
변환 결과 JSON:
[
{"name": "홍길동", "age": "30", "department": "개발팀", "salary": "5000000"},
{"name": "김철수", "age": "25", "department": "기획팀", "salary": "4500000"},
{"name": "이영희", "age": "28", "department": "디자인팀", "salary": "4800000"}
]
타입 변환 주의사항
CSV에서 JSON으로 변환할 때 모든 값은 기본적으로 문자열(string) 로 변환됩니다.
숫자나 불리언 타입이 필요하다면 애플리케이션에서 추가 처리가 필요합니다:
// JavaScript에서 타입 변환
const data = csvData.map(row => ({
...row,
age: Number(row.age),
salary: Number(row.salary),
active: row.active === 'true'
}))
헤더 설정
- 첫 행을 헤더로 사용: 일반적인 CSV 형태. 첫 번째 행이 키 이름이 됨
- 헤더 없음: 모든 행이 데이터로 처리되며,
field_1,field_2등 자동 키 부여