JSON 엑셀 변환 시 값이 빈 칸으로 사라지는 이유

API나 데이터베이스에서 뽑은 JSON 배열을 엑셀 파일로 바꿔 열어보면, 분명 값이 있던 열인데 셀이 통째로 비어 있는 경우가 있습니다.

이건 변환이 잘못돼서가 아니라 그 값이 중첩된 객체나 배열이었기 때문에 생기는, 예측 가능한 동작입니다. 어떤 빈 칸이 정상이고 어떤 빈 칸이 진짜 데이터 손실인지, 변환 전에 미리 구분하는 방법을 정리합니다.

요약 ① 항목마다 있는 키가 달라서 생기는 빈 칸은 정상입니다 — 그 항목에 원래 없던 값입니다. ② 값이 중첩된 객체·배열이면 열 제목은 만들어지지만 실제 엑셀 파일에는 그 값이 담기지 않습니다. ③ 브라우저 콘솔에서 몇 줄만 실행하면 어떤 열이 비게 될지 변환 전에 미리 확인할 수 있습니다.

JSON을 엑셀로 바꿨더니 특정 열이 통째로 비는 상황

쇼핑몰 주문 데이터를 JSON으로 내려받아 엑셀로 바꿔 담당 부서에 전달하는 상황을 생각해봅니다. 주문마다 "옵션"이라는 필드에 색상·용량 같은 정보가 { } 형태로 담겨 있고, 일부 주문은 이 필드 자체가 없습니다.

엑셀로 변환해 열어보면 "옵션"이라는 열 제목은 분명히 생겼는데, 그 아래 칸이 전부 비어 있습니다. 필드가 없던 주문만 비어야 정상인데 값이 있던 주문까지 비어 있으니 변환이 잘못된 건 아닌지 헷갈립니다.

도구 없이 원인을 먼저 구분하는 방법

두 가지 빈 칸은 원인이 다르므로, 변환 전에 원본 JSON에서 미리 구분해두면 결과를 보고 당황하지 않습니다. 브라우저 개발자 도구(F12, 맥은 Cmd+Option+I)의 콘솔에서 확인합니다.

항목마다 키가 다른지 확인하기

콘솔에 원본 배열을 변수에 담고 다음을 실행하면 배열 전체에 등장하는 키 목록이 나옵니다.

const data = JSON.parse(원본JSON텍스트);
const keys = new Set();
data.forEach(row => Object.keys(row).forEach(k => keys.add(k)));
console.log([...keys]);

여기 나온 키가 실제 엑셀 열이 됩니다. 특정 항목에만 이 키가 없다면 그 행만 비는 것이 정상이며, 나머지 항목은 값이 그대로 채워집니다.

값이 중첩된 객체·배열인지 확인하기

반대로 값 자체가 사라지는 열은 아래 코드로 찾습니다.

data.forEach((row, i) => {
  Object.entries(row).forEach(([k, v]) => {
    if (v !== null && typeof v === "object") {
      console.log(i + "번째 항목의 \"" + k + "\"는 중첩된 값 — 엑셀 변환 시 빈 칸이 됩니다");
    }
  });
});

여기 찍히는 키는 값이 있어도 엑셀 셀에는 반영되지 않습니다. 미리 걸러서 JSON.stringify(v)로 문자열로 바꾸거나, 필요한 하위 값만 별도 키로 꺼내둬야 엑셀에 남습니다.

이 두 확인을 매번 콘솔에 옮겨 적는 대신, 붙여넣기만 하면 행·열 수를 바로 보여주는 페이지가 아래 도구입니다.

JSON → 엑셀(XLSX) 변환

무료 · 가입 불필요 · JSON은 서버로 가지 않고 브라우저에서만 xlsx로 변환됩니다

자주 막히는 지점

짧은 사실만 표로 정리합니다.

상황실제로 일어나는 일
항목마다 키 구성이 다름전체 키를 합친 하나의 표가 되고, 없는 키는 그 행만 빈 칸(정상)
값이 중첩 객체 { }열 제목은 생기지만 실제 셀에는 값이 담기지 않음(오류 메시지 없음)
값이 배열 [ ]객체와 마찬가지로 셀에 반영되지 않음
시트 이름에 \ / ? * [ ] : 포함해당 문자만 자동으로 지워지고 나머지 이름으로 저장
파일 이름에 " < > | 포함시트 이름과는 다른 문자 목록이 적용되어, 이 문자들만 지워짐
시트 이름이 32자 이상앞 31자까지만 저장(엑셀 시트 이름 자체 규격)

시트 이름과 파일 이름은 서로 다른 규칙을 적용합니다. 엑셀 파일 규격상 시트 이름에 쓸 수 없는 문자와, 운영체제가 파일 이름에 금지하는 문자가 서로 다르기 때문입니다.

정리

  • 항목마다 키 구성이 달라서 생기는 빈 칸은 정상입니다. 전체 키를 합친 하나의 표가 되고 없는 값만 그 행에서 빕니다.
  • 값이 중첩된 객체·배열이면 열 제목만 남고 실제 값은 엑셀 셀에 담기지 않습니다. 오류 메시지도 뜨지 않습니다.
  • 두 경우는 완성된 엑셀 파일만 보고는 구분할 수 없으므로, 변환 전 원본 JSON에서 콘솔로 먼저 확인해야 합니다.
  • 시트 이름과 파일 이름에 금지된 문자는 서로 다르며, 시트 이름은 31자로 잘립니다.
JSON → 엑셀(XLSX) 변환

무료 · 가입 불필요 · JSON은 서버로 가지 않고 브라우저에서만 xlsx로 변환됩니다

자주 묻는 질문

중첩된 값을 엑셀에 그대로 남기려면 어떻게 해야 하나요?

변환 전 JSON에서 그 값을 문자열로 바꿔두면 됩니다. JSON.stringify(row.옵션)으로 중첩 객체를 하나의 텍스트로 바꿔 같은 키에 넣으면, 문자열이므로 셀에 그대로 표시됩니다.

색상·용량처럼 하위 값만 꺼내 별도 키로 미리 나눠두는 방법도 있습니다.

값이 없던 행과 값이 사라진 행을 엑셀 파일만 보고 구분할 수 있나요?

파일만 보고는 구분되지 않습니다. 둘 다 그냥 빈 칸으로 보이기 때문입니다. 그래서 변환 전에 원본 JSON에서 위 콘솔 스크립트로 먼저 확인해야 합니다.

시트 이름을 비워두면 어떻게 되나요?

빈 값이거나 금지된 문자만 있어서 지워지고 남는 게 없으면 자동으로 "Sheet1"로 저장됩니다.

입력한 JSON이나 만들어진 엑셀 파일이 서버로 전송되나요?

아니요. 입력한 JSON과 변환된 엑셀 파일은 모두 브라우저 안에서만 처리되며 서버로 전송되거나 저장되지 않습니다.

가격 보기카톡 무료 상담