한국어

JSON CSV 변환 — JSON 배열을 엑셀용 CSV로 바꾸기

JSON 객체 배열을 CSV로 변환 (중첩 평탄화, 구분자 선택, 엑셀용 BOM)

브라우저에서 처리 · 서버로 전송되지 않음

CSV 결과

소개

JSON 배열은 개발에서 흔하지만 엑셀이나 구글 시트에서는 CSV가 훨씬 다루기 쉽습니다. 이 도구는 [{...}, {...}] 모양의 JSON을 헤더가 있는 CSV로 바꿔 줍니다. 입력이 바뀔 때마다 바로 결과를 보여 주고, 파일로 받을 수도 있어요.

사용법

  1. 객체 배열 JSON을 입력 칸에 붙여 넣습니다. 객체 하나만 넣으면 한 행짜리 표가 됩니다.
  2. 구분자를 쉼표, 세미콜론, 탭, 파이프 중에서 고릅니다. 유럽식 엑셀은 세미콜론을 기대하는 경우가 있습니다.
  3. 엑셀에서 열 계획이라면 UTF-8 BOM을 켜 둔 채 ’CSV 파일 받기’를 누릅니다.
  4. 다른 프로그램에 붙여 넣을 때는 복사 버튼을 씁니다.

기준

  • CSV 형식은 RFC 4180을 따릅니다. 구분자·큰따옴표·줄바꿈이 들어 있는 값은 큰따옴표로 감싸고 내부의 큰따옴표는 두 번 씁니다. 줄 끝은 CRLF입니다.
  • 첫 행은 헤더입니다. 열은 모든 행을 훑어 키가 처음 나온 순서대로 합칩니다.
  • 중첩 객체는 점 표기(a.b.c)로 펼칩니다. 비어 있는 객체와 배열은 {}, [...] 같은 JSON 문자열로 한 칸에 담습니다. 키 자체에 점이 들어 있으면 되돌릴 때 구분할 수 없습니다.
  • null은 빈 칸, 불리언은 true/false, 숫자는 JavaScript가 쓰는 표기 그대로 나옵니다. 9007199254740991을 넘는 정수는 JSON을 읽는 단계에서 반올림되므로 경고를 보여 줍니다.
  • 객체가 아닌 배열 요소(숫자, 문자열 등)는 value라는 한 열로 만듭니다.
  • 파일 인코딩은 UTF-8이며, BOM은 받는 파일에만 붙습니다.

예시

입력:

[{"이름":"홍길동","주소":{"시":"서울"},"태그":["a","b"]},{"이름":"김철수"}]

결과:

이름,주소.시,태그
홍길동,서울,"[""a"",""b""]"
김철수,,

참고

  • 엑셀에서 더블클릭으로 열 때만 BOM이 필요합니다. 구글 시트 가져오기나 대부분의 데이터베이스 가져오기는 BOM 없는 UTF-8을 기대하므로 그때는 BOM을 끄세요.
  • 수식처럼 보이는 값(=, +, -, @로 시작)은 엑셀이 수식으로 실행할 수 있습니다. 출처를 믿을 수 없는 데이터라면 수식으로 실행될 수 있는 값 앞에 ’ 붙이기를 켜세요. 그런 값 앞에 작은따옴표를 붙여 글자로만 보이게 하고(CSV를 열면 작은따옴표도 칸에 함께 보여요), -12.5 같은 음수는 숫자 그대로 둡니다. 기본은 꺼져 있어 값을 바꾸지 않습니다.
  • 되돌릴 때 주의하세요. null은 빈 칸이 되므로 CSV에서는 빈 문자열과 구분되지 않습니다. 또 CSV에는 타입 정보가 없어서, 다시 JSON으로 바꿀 때 숫자 변환 옵션을 켜면 "123" 같은 숫자 문자열이 숫자 123으로 바뀝니다.
  • 매우 큰 JSON은 브라우저 메모리를 쓰므로, 수십 MB 이상이면 나눠서 변환하는 편이 안전합니다.

자주 겪는 경우

  • 객체마다 키가 다르면 모든 행의 키를 합쳐 열을 만들고, 없는 값은 빈 칸으로 남습니다. 예를 들어 첫 행에만 메모가 있어도 열은 생깁니다.
  • 값 안에 쉼표나 줄바꿈이 있으면 자동으로 큰따옴표로 감싸므로 엑셀에서 열이 밀리지 않습니다. 주소처럼 쉼표가 많은 데이터도 안전합니다.
  • 최상위가 객체 하나라면 한 행짜리 표가 되고, 숫자나 문자열 배열([1, 2, 3])은 value 열 하나에 한 줄씩 들어갑니다.
  • 한글이 깨져 보이면 인코딩 문제이므로 BOM 옵션을 켠 파일로 다시 열어 보세요. 값 자체가 바뀐 것은 아닙니다.
  • 배열 안의 객체까지 열로 펼치고 싶다면 먼저 JSON을 가공해 한 단계 평평하게 만든 뒤 변환하는 편이 결과가 깔끔합니다.

활용 팁

  • 서버 로그나 API 응답을 팀원에게 공유할 때, 엑셀이 익숙한 비개발자에게는 CSV가 가장 빠른 방법입니다. 변환한 뒤 열 순서를 바꾸고 싶다면 JSON에서 키 순서를 먼저 맞추세요. 열 순서는 키가 처음 나온 순서를 따릅니다.
  • 날짜를 문자열("2024-01-02")로 넣어 두면 엑셀이 날짜 형식으로 자동 변환해 보여 줄 수 있습니다. 표시만 바뀌고 파일 값은 그대로이니, 원본 형식이 중요하면 셀 서식을 텍스트로 지정하세요.
  • 숫자 앞의 0이 중요한 전화번호나 우편번호도 JSON에서 문자열로 두어야 합니다. 다만 엑셀이 CSV를 열 때 앞자리 0을 지울 수 있으므로, 가져오기 마법사에서 해당 열을 텍스트로 지정하세요.
  • 여러 파일을 합쳐야 한다면 JSON 배열 둘을 하나로 이어 붙인 뒤 변환하면 열이 자동으로 합쳐집니다.
  • 개인정보가 담긴 데이터도 서버로 전송되지 않으니 로컬에서 안전하게 변환할 수 있습니다.

더 알아두면 좋은 점

  • 구분자로 탭을 고르면 결과를 엑셀이나 구글 시트에 바로 붙여 넣었을 때 칸이 자동으로 나뉩니다. 쉼표 대신 탭을 쓰면 값 안의 쉼표 때문에 따옴표가 많아지는 일도 줄어듭니다.
  • 값이 큰따옴표로 감싸진 셀은 엑셀에서 열 때 따옴표가 보이지 않으니 정상입니다. 따옴표가 그대로 보인다면 구분자 설정이 서로 다른 경우가 많으니 가져오기 설정을 확인해 보세요.
  • 행 수가 많아도 헤더는 한 번만 출력되고, 모든 행의 열 개수는 헤더와 같게 맞춰집니다. 빈 값 때문에 쉼표가 연속으로 나오는 것은 정상입니다.
  • 결과 CSV에서 줄 끝은 CRLF이므로 윈도우 메모장에서도 줄바꿈이 올바르게 보입니다.
  • 숫자는 1.0이 1로 나오는 등 JavaScript 표기로 정리됩니다. 소수점 자릿수를 유지해야 하는 값은 JSON에서 문자열로 넣어 두세요.
  • 이 도구는 값을 임의로 바꾸지 않으므로 앞뒤 공백이 있는 문자열도 그대로 남습니다. 엑셀에서 공백이 의심되면 TRIM 함수로 정리하세요.
  • 열 이름에 한글이 들어 있어도 문제없고, 점이 들어 있는 키는 중첩 객체와 구분되지 않으니 변환 전에 이름을 바꾸는 편이 안전합니다.
  • 결과가 길어도 복사와 파일 받기는 같은 내용을 쓰며, 파일 이름은 브라우저 기본값으로 저장됩니다.

추가 예시

JSON CSV 결과
[{"a":1,"b":null}] 헤더 a,b, 값 행 1, (null은 빈 칸)
[{"a":"x,y"}] 값이 "x,y"로 감싸져 한 칸으로 유지됩니다
[{"a":{"b":{"c":1}}}] 헤더 a.b.c, 값 1
[1, "둘", true] 헤더 value, 세 줄

같은 JSON을 쉼표와 세미콜론으로 바꿔 두 번 받아 보고, 내 엑셀에서 칸이 올바르게 나뉘는 쪽을 쓰면 됩니다. 한국어 환경에서는 대개 쉼표가 잘 맞습니다.

엑셀에서 열었을 때 열 너비가 좁아 보이면 열 경계를 더블클릭해 자동 맞춤을 하세요. 데이터 자체는 바뀌지 않습니다. 또한 파일을 받은 뒤 엑셀에서 다시 저장하면 BOM과 따옴표 처리가 엑셀 기본값으로 바뀔 수 있으니, 원본 CSV는 따로 보관하는 것이 좋습니다.

데이터가 수천 행이어도 변환은 입력을 바꾸는 즉시 이루어지지만, 아주 큰 입력은 잠시 기다린 뒤 결과가 갱신됩니다. 결과 칸의 내용을 다른 형식으로도 쓰고 싶다면 구분자 옵션만 바꿔 다시 복사하면 됩니다. 입력 JSON을 수정하지 않아도 되므로 여러 형식을 빠르게 비교할 수 있습니다.

마지막으로, 변환한 CSV를 다른 사람에게 전달할 때는 어떤 구분자와 인코딩을 썼는지 함께 알려 주세요. 받는 사람이 엑셀로 열지 데이터베이스로 가져올지에 따라 BOM과 구분자 설정이 달라지기 때문에, 이 정보만 있어도 한글이 깨지거나 열이 밀리는 문제를 대부분 예방할 수 있습니다. 개인정보가 들어 있는 표를 다룰 때는 필요한 열만 남긴 JSON으로 변환하는 것이 좋습니다. 불필요한 필드를 미리 지우면 파일 크기도 줄고 실수로 외부에 공유할 위험도 낮아집니다. 변환 결과를 검증하려면 CSV를 CSV → JSON 변환기에 다시 넣어 행 수와 열 이름이 같은지 비교해 보세요.

자주 묻는 질문

엑셀에서 CSV를 열면 한글이 깨져요. 어떻게 하나요?

엑셀은 BOM이 없는 UTF-8 CSV를 CP949 같은 옛 인코딩으로 오해하는 경우가 많습니다. 'UTF-8 BOM 붙이기'를 켠 채로 CSV 파일 받기를 누르면 파일 맨 앞에 BOM(EF BB BF)이 붙어 엑셀이 UTF-8로 읽습니다. 복사 버튼은 BOM을 빼고 복사합니다.

중첩된 JSON은 어떻게 표가 되나요?

객체 안의 객체는 `address.city`처럼 점으로 이은 열 이름으로 펼칩니다. 배열은 칸 하나에 JSON 문자열로 넣습니다. 행마다 키가 다르면 처음 나온 순서대로 열을 합치고 없는 칸은 비워 둡니다.

변환한 CSV를 다시 JSON으로 되돌릴 수 있나요?

CSV → JSON 변환기에서 숫자 변환과 중첩 복원 옵션을 켜면 원래 구조에 가깝게 돌아옵니다. 다만 CSV에는 타입 정보가 없어서 문자열 "123"과 숫자 123은 구분할 수 없습니다.

입력한 데이터가 서버로 올라가나요?

아니요. 변환은 모두 브라우저에서 이루어지며 데이터를 전송하거나 저장하지 않습니다.

필요한 도구가 있나요?