단어 그 자체: 데이터에서 "평평하다"는 뜻
JSON은 잠시 잊고 단어부터 떠올려볼게요. 평평한 표면에는 울퉁불퉁한 곳도, 층도, 숨은 깊이도 없어요. 모든 것이 같은 높이에, 한눈에 보여요. 데이터 업계가 이 이미지를 빌려왔어요. 평평한 데이터란 중첩이 없는 데이터예요. 모든 값이 최상위 레벨에, 자리 하나에 값 하나씩, 다른 것 안에 들어간 것 없이 존재해요. 평평한 표면은 발이 걸릴 곳이 없고, 눈도 길을 잃지 않아요. 데이터도 마찬가지예요. 평평한 데이터는 열어볼 안쪽이 없어서, 행 하나만 보면 전부가 보여요.
스프레드시트의 한 행이 평평한 데이터의 가장 순수한 예예요. 한 행, 한 세트의 컬럼, 셀 하나에 값 하나. C4 셀의 값이 또 다른 스프레드시트를 품고 있지는 않아요. 텍스트이거나, 숫자이거나, 아무것도 없거나, 셋 중 하나예요. 그게 평평함이에요. 그래서 표라는 그릇은 태생적으로 평평해요. 행과 컬럼이라는 틀 자체가 깊이를 허용하지 않으니까요. 사람이 눈으로 훑는 데이터는 깊이보다 너비가 편하다는 걸, 스프레드시트를 만든 사람들도 알았어요.
반면 JSON은 거의 절대 평평하지 않아요. 중첩돼요. 객체가 객체를 품고, 배열이 객체를 품고, 객체가 배열을 품어요. 고객 레코드는 주소 객체를 품고, 주소는 좌표를 품고, 좌표는 숫자 한 쌍을 품을 수 있어요. 그 중첩이 JSON의 존재 이유이고, "평탄화"라는 단어가 존재하는 이유이기도 해요. 트리를 표에 부으려면 가지에 뭔가를 해야 해요. 평탄화는 그 뭔가의 이름이에요. 이 비유가 중요한 이유는, 변환 작업의 본질을 한 단어로 압축하기 때문이에요. "평탄화하라"는 말 한마디에 "깊이를 없애고, 값은 살리고, 위치는 이름으로 기록하라"는 세 가지 지시가 다 들어 있어요.
그래서 "JSON을 평탄화하라"는 말은 이런 뜻이에요. 이 중첩된 구조를 다시 써서, 모든 값이 최상위 레벨에 살게 하고, 어디에서 왔는지를 기록한 이름으로 부르라는 거예요. 값 자체는 안 바뀌어요. 바뀌는 건 주소예요. 중첩 객체를 관통하는 경로에서, 하나의 평평한 이름으로요. 이때 값은 복사도 변형도 안 돼요. 그대로 옮겨지고, 라벨만 바뀌어요. 그래서 평탄화는 데이터 이동이 아니라 주소 변경이라고 외워두면 실수가 줄어요.
이 단어가 있는 이유: JSON은 중첩되고, CSV는 안 돼요
긴장을 한 장면으로 볼게요. JSON은 트리예요. 가지, 잔가지, 잎사귀. CSV는 표예요. 행과 컬럼, 그 아래는 아무것도 없어요. CSV 셀은 객체를 담을 수 없어요. 텍스트만 담을 수 있어요. 그러니 JSON에서 CSV로의 모든 변환은 같은 질문에 답해야 해요. 중첩을 어떻게 할 건가? 나무를 상자에 넣으려면 가지를 쳐야 하듯이, 트리를 표에 넣으려면 중첩을 처리해야 해요. 그 처리가 바로 오늘의 주제예요.
가능한 답은 몇 개 안 되고, "평탄화"가 가장 흔해요. 실제 레코드 하나를 볼게요. API가 반환할 법한 모양이에요. 이 레코드는 일부러 작게 만들었어요. 필드가 셋뿐이라서, 각 필드가 평탄화 과정에서 어디로 가는지 눈으로 쫓기 쉬우니까요. 실제 API 응답은 필드가 수십 개지만, 원리는 똑같아요.
{
"id": "A-101",
"customer": { "name": "Amelia", "city": "Austin" },
"tags": ["new", "vip"]
}customer 객체가 한 단계 아래에 있어요. tags 목록도 한 단계 아래예요. CSV에는 "한 단계 아래"라는 게 없으니, 평탄화된 버전은 모든 것을 수면 위로 끌어올려요. 이 출력은 손으로 만든 예시가 아니에요. 이 페이지 상단의 변환기에 위 JSON을 그대로 붙여넣고 평탄화를 켠 결과예요. 여러분도 같은 입력을 넣으면 같은 출력을 얻을 수 있어요.
평탄화가 실제로 하는 일, 단계별로
평탄화는 하나의 요술이 아니라, 곳곳에 적용되는 네 가지 작은 규칙이에요. 위의 레코드를 이 페이지의 변환기에 평탄화 켜기로 돌리면, 정확히 이렇게 나와요. 빌드 머신에서 검증했어요. 네 가지를 외우기보다, 각 규칙이 어떤 모양의 데이터를 만나면 발동하는지 보는 게 빨라요. 아래 출력에서 customer로 시작하는 이름 둘, 합쳐진 tags 하나를 찾아보세요.
{
"id": "A-101",
"customer.name": "Amelia",
"customer.city": "Austin",
"tags": "new; vip"
}규칙 하나: 중첩 객체는 점 표기법 컬럼이 돼요. 값까지의 경로가 이름이 되는 거예요. customer.name, customer.city처럼요. 점들은 그냥 발자국 표시예요. Amelia의 이름 자체는 하나도 안 바뀌었고, 바뀐 건 주소 라벨뿐이에요. 경로가 이름이 되는 규칙은 재귀적이에요. 세 단계 중첩이면 점이 두 개 찍히고, 네 단계면 세 개가 찍혀요. 깊이가 깊어질수록 컬럼 이름이 길어지는 이유가 여기 있어요.
규칙 둘: 단순 값들의 짧은 목록은 하나의 셀에 이어져요. "new"와 "vip"는 "new; vip"라는 하나의 텍스트가 됐어요. 두 값은 여전히 있지만, 이제는 구분자로 이어진 하나의 문자열이고, 둘이었다는 사실은 더 이상 기계가 읽을 수 없어요. 구분자는 보통 세미콜론이에요. 쉼표는 CSV의 구분자와 충돌하니까 피하는 거예요. 이 선택 하나가 나중에 값을 다시 나누는 작업의 운명을 정해요.
규칙 셋: 객체들의 목록은 구분자로 이어붙일 수가 없어서, 하나의 셀 안에 JSON 텍스트로 접혀들어가요. [{"sku":"B1","qty":2}] 같은 items 목록은 따옴표로 감긴 긴 셀 하나가 돼요. 데이터는 살아남지만, 구조가 아니라 다시 파싱해야 하는 텍스트로요. 이 셀이 "읽을 수 없는 덩어리"가 되는 이유예요. 스프레드시트는 텍스트를 있는 그대로 보여줄 뿐, 그 안에 JSON이 들어 있다는 걸 모르거든요. 사람이 보면 긴 문자열, 기계가 보면 파싱해야 할 숙제예요.
규칙 넷: null과 빈 값은 빈 셀이 돼요. 평평한 표에 "명시적으로 아무것도 없음"을 쓸 방법은 없어서, null은 그냥 빈칸으로 사라져요. 이건 꼭 기억하세요. 평탄화 후에는 "null이었다"와 "빈 목록이었다"와 "애초에 없었다"를 구분할 수 없어요. 그래서 평탄화된 표에서는 빈 셀이 세 가지 뜻을 동시에 가져요. "값이 없었다", "빈 목록이었다", "필드 자체가 없었다". 이 모호함은 평탄화의 대가 중 하나예요.
같은 데이터에서 평탄화를 끈 경우와 비교하면, 이 단어의 의미 전체가 드러나요. 토글이 꺼지면 customer 객체는 {"name":"Amelia","city":"Austin"}이라는 JSON 텍스트 셀 하나로 남아요. 데이터는 잃지 않았지만, 평평하지도 않아요. 셀 안에 여전히 중첩이 있고, 스프레드시트는 읽을 수 없는 덩어리를 보여줄 거예요. 평평하다는 건 끝까지 평평하다는 거예요. 셀 하나에 값 하나, 예외 없어요. 토글 하나로 같은 입력이 완전히 다른 두 출력이 되는 걸 직접 확인해보세요. 평탄화는 옵션이 아니라, 표를 만드는 핵심 연산이라는 게 이 비교 하나로 증명돼요.
바로잡을 혼동: 평탄화는 minify가 아니에요
"JSON을 평탄화해라"가 무슨 뜻인지 초보 다섯 명에게 물으면 한 명은 이렇게 할 거예요. 개행과 공백을 전부 지워서 거대한 한 줄을 만들어요. 그건 평탄화가 아니라 minify예요. 파일 크기를 줄이는 공백 제거지, 구조와는 아무 상관이 없어요. 두 단어는 비슷하게 들리지만 완전히 다른 걸 가리키기 때문에 구분이 중요해요. 이 혼동이 위험한 건, 겉보기에 뭔가 한 것 같기 때문이에요. 한 줄이 되면 "납작해졌다"는 느낌이 들잖아요. 하지만 데이터의 입장에서 바뀐 건 아무것도 없어요.
minify는 공백을 바꿔요. 평탄화는 구조를 바꿔요. minify된 JSON 파일은 여전히 중첩돼 있고, 그냥 한 줄에 중첩돼 있을 뿐이에요. 빌드 머신에서 검증했어요. 같은 레코드의 minify 버전과 예쁘게 출력된 버전을 파싱하면 바이트 단위로 동일한 구조가 나오고, 어느 쪽이든 customer 객체는 여전히 객체예요. 트리는 움직이지 않았어요. 바뀐 건 페인트뿐이에요. minify는 전송량을 줄이려는 최적화예요. 공백을 지우면 파일이 가벼워지니까요. 하지만 그건 저장과 전송의 문제지, 데이터 모양의 문제가 아니에요. 목적부터가 달라요.
# minified: no whitespace, STILL nested -> customer is an object
{"id":"A-101","customer":{"name":"Amelia","city":"Austin"},"tags":["new","vip"]}
# flattened: depth 1, nothing nested at any width
{"id":"A-101","customer.name":"Amelia","customer.city":"Austin","tags":"new; vip"}왜 혼동이 생길까요? 일상 말에서 "flat"은 가끔 "한 줄"이라는 뜻으로 쓰이기 때문이에요. "한 줄로 펼쳐라"처럼요. 데이터 일에서 "flat"은 "중첩 없음"이라는 뜻이에요. 어떤 튜토리얼이 스프레드시트 가져오기 전에 JSON을 평탄화하라고 하면 구조적인 쪽을 뜻해요. 점 표기법 컬럼, 합쳐진 목록, 셀 하나에 값 하나. 공백을 지운다고 가져오기가 나아지는 건 하나도 없어요. 가져오기 마법사가 원하는 건 구조예요. 열이 몇 개인지, 각 셀에 값이 하나씩 들어 있는지. 공백 개수는 마법사가 신경 쓸 일이 하나도 없어요. 그러니 minify는 가져오기 전에 할 일이 아니에요.
같은 개념, 다른 이름들
평탄화가 뭔지 알고 나면, 온갖 옷을 입고 여기저기서 보여요. 파이썬의 pandas 라이브러리에서는 함수가 json_normalize라고 불리고, "normalize"가 정확히 평탄화 일을 해요. 중첩 객체가 점 표기법 컬럼이 되는 거예요. 앞서 테스트에서 검증했어요. customer.address를 이 페이지의 변환기가 하는 것과 똑같이 customer.city로 펼쳐요. 이름만 다르고 하는 일은 같은 경우를 알아두면, 새 도구를 배울 때 두려움이 줄어요. "이거 평탄화랑 같은 거구나" 하고 매핑되는 순간, 문서를 반쯤 읽은 거예요.
엑셀 Power Query에서는 버튼이 "확장"이라고 쓰여 있어요. 중첩 레코드 컬럼의 작은 이중 화살표를 누르면 새 컬럼으로 펼쳐져요. 같은 개념, 더 친근한 동사예요. SQL에서는 UNNEST가 중첩 배열을 행으로 바꿔요. 같은 가족이에요. 버튼 이름이 "확장"인 건 우연이 아니에요. 사용자에게는 중첩된 상자를 여는 느낌이 더 직관적이거든요. 하지만 엔진이 하는 일은 점 표기법 컬럼 만들기와 똑같아요.
솔직한 주의 하나: 명령줄 JSON 도구 jq에서는 "flatten"이 더 좁은 뜻이에요. jq의 flatten은 중첩 배열을 하나의 배열로 접어요. 객체를 점 표기법 경로로 바꾸지 않아요. jq 튜토리얼에서 "flatten"이 나오면, 어느 뜻인지 먼저 확인하고 넘어가세요. 데이터 업계는 단어를 느슨하게 재활용하고, 이게 용어가 진짜로 갈라지는 지점이에요. jq의 flatten이 배열 전용인 건, jq가 애초에 스트림 처리 도구라서예요. 배열을 다루는 일이 많아서 좁은 의미의 flatten이 더 자주 쓰이는 거예요. 도구의 쓰임새가 단어의 뜻을 정한 셈이에요.
평탄화에는 이름 붙일 만한 사촌 둘도 있어요. 셋을 사람들이 자꾸 섞으니까요. 평탄화는 레코드당 한 행을 유지하고 컬럼을 넓혀요. 펼치기는 컬럼을 유지하고 행을 늘려요. 목록 항목 하나당 한 행씩이요. 합치기는 목록을 하나의 셀에 접어요. 위의 규칙 둘이 짧은 목록에 하는 일이 바로 그거예요. 펼치기냐 합치기냐 결정은 "how to flatten the JSON data: JSON 데이터를 펼치고, 합치고, 중첩 그대로 두는 방법 (2026 가이드)"에서 실제 예제로 훑어볼 수 있고, 이 페이지 변환기의 평탄화 스위치가 셀 하나하나에 뭘 하는지는 "중첩된 JSON을 CSV로 변환하는 방법: 평탄화 토글이 실제로 하는 일 (2026 가이드)"에서 보여줘요. 셋을 구분하는 가장 쉬운 기준은 행의 개수예요. 평탄화는 행이 그대로, 펼치기는 행이 늘어나고, 합치기는 셀 안의 내용이 늘어나요. 행을 세면 답이 나와요.
평탄화가 치르는 비용
평탄화는 정직한 일이지만, 손실이 있는 일이에요. 클릭하기 전에 그 손실을 이름 붙여둘 만해요. 첫째, 모양은 영원히 사라져요. 평탄화 후에는 city와 state가 하나의 주소 객체 안에서 형제였다는 걸 기록하는 게 아무것도 없어요. 그냥 접두사를 공유하는 두 컬럼일 뿐이에요. 예를 들어 주소 객체 안의 도시와 주가 형제였다는 사실은, 평탄화 후에는 두 컬럼 이름의 공통 접두사에서만 어렴풋이 짐작할 수 있어요. 구조 정보가 이름 정보로 바뀐 거예요.
둘째, 점 표기법에는 아무도 경고해주지 않는 모호함이 있어요. JSON에 말 그대로 "a.b"라는 키가 최상위에 있으면서, 동시에 a라는 중첩 객체 안에 b라는 키가 있으면, 둘 다 같은 컬럼 이름으로 평탄화되고 한 값이 다른 값을 조용히 덮어써요. 실제로는 드물지만, 맞으면 잔인해요. 이런 충돌을 피하려면, 원본 JSON의 키에 점을 쓰지 않는 게 좋아요. 키 이름 규칙 하나가 나중에 큰 사고를 막아줘요. API를 설계하는 분이라면 지금 메모해두세요.
셋째, 합쳐진 목록은 개수 정보를 잃어요. "new; vip"는 하나의 문자열처럼 보여요. CSV를 읽는 프로그램은 구분자로 나누기 전에는 그게 태그 두 개였다는 걸 알 수 없고, 태그 안에 세미콜론이 하나라도 있으면 그마저도 깨져요. 더 큰 문제는 태그 안에 구분자가 들어가는 순간이에요. "new; vip"를 나누면 태그가 두 개 나오지만, 태그 자체가 "a; b"였다면 나누는 순간 세 개가 돼요. 되돌리기가 깨지는 지점이에요.
넷째, 타입이 무너져요. 101은 문자 "101"이 돼요. true는 문자 "true"가 돼요. CSV를 여는 쪽이 의미를 정하고, 특히 엑셀은 데이터를 재해석하는 걸 좋아해요. 앞자리 0은 사라지고, 긴 ID는 과학적 표기법이 돼요. 값은 평탄화를 살아남았지만, 스프레드시트를 살아남지 못할 수 있어요. 날짜도 같은 운명이에요. "2024-01-05"라는 텍스트가 엑셀에서는 날짜로, 구글 시트에서는 텍스트로 보일 수 있어요. 같은 CSV인데 여는 도구에 따라 의미가 달라지는 거예요.
이게 평탄화가 틀렸다는 뜻은 아니에요. 평탄화는 편도 여행이라는 뜻이고, 원본 JSON은 원본으로 보관해야 해요. 사본을 평탄화해서 사본으로 작업하고, 평탄화의 출발점이 된 트리를 버리면 안 돼요. 원본 JSON을 보관하는 건 비용이 거의 안 들어요. 텍스트 파일 하나예요. 하지만 잃어버린 구조를 되살리는 건 불가능에 가까워요. 싼 쪽을 보관하는 게 정답이에요.
평탄화할까요? 60초 결정법
결정은 데이터가 아니라 목적지가 내려요. 목적지가 스프레드시트, CSV 가져오기, 행을 눈으로 훑는 사람이라면 평탄화하세요. 그런 도구들이 소비하도록 설계된 모양이 그거고, 평탄화된 파일은 어디서든 깔끔하게 열려요. 스프레드시트는 표를 위해 태어난 도구라서, 평탄화된 데이터를 가장 잘 소화해요. 필터, 정렬, 피벗 테이블이 전부 평평한 행을 전제로 동작하거든요.
목적지가 다른 프로그램, API, 나중에 JSON으로 돌아올 왕복이라면 평탄화하지 마세요. 중첩을 유지하세요. 위에 나열한 평탄화 손실 하나하나가 돌아오는 길에서 풀어야 할 버그가 되거든요. API는 보통 JSON을 받고 JSON을 돌려줘요. 중간에 CSV를 끼우면 타입과 구조가 두 번 손상돼요. 가는 길에 한 번, 오는 길에 한 번. 왕복 데이터에는 평탄화가 독이에요.
확실하지 않으면 사본을 평탄화해서 눈으로 보세요. CSV를 열어서 점 표기법 컬럼이 말이 되는지, 합쳐진 목록이 제대로 보이는지, 중요한 게 읽을 수 없는 덩어리가 되지 않았는지 확인하세요. 60초의 눈이 엉터리 가져오기를 한 시간 디버깅하는 걸 이겨요. 확인할 때는 컬럼 이름부터 보세요. 점 표기법이 말이 되는지, 합쳐진 셀이 이상하지 않은지, 빈 셀이 너무 많지 않은지. 세 가지만 봐도 대부분의 문제를 잡아내요.
- 스프레드시트, CSV 가져오기, 사람이 눈으로 검토: 평탄화하세요. 그런 도구들이 기대하는 모양이고, 평탄화된 파일이 가장 잘 열려요.
- API, 데이터베이스, JSON으로의 왕복: 중첩을 유지하세요. 평탄화 손실이 돌아오는 길에서 버그가 돼요.
- 확실하지 않음: 사본을 평탄화해서 열고, 확정 전에 컬럼을 확인하세요. 60초면 충분해요.
이 페이지에서 해보세요
이 페이지 상단의 변환기는 기본적으로 평탄화를 해요. 중첩된 JSON을 붙여넣으면 미리 보기에서 확인해요. 중첩 객체는 점 표기법 컬럼이 되고, 목록은 "; "로 이어지며, 모든 셀은 정확히 하나의 값을 담아요. 평탄화를 끄고 같은 JSON을 붙여넣으면 이 단어가 만드는 차이를 볼 수 있어요. 셀 안의 중첩 덩어리 대 깔끔한 평평한 표. 자기 데이터로 나란히 비교해보는 게 용어를 각인시키는 가장 빠른 길이에요. 토글을 껐다 켰다 하면서 미리 보기가 어떻게 바뀌는지 보는 것만으로, 오늘 배운 네 가지 규칙이 전부 눈앞에서 재현돼요. 이론보다 손이 빨라요.
JSON에 행으로 만들고 싶은 객체 목록이 있다면, 평탄화만으로는 안 돼요. 그건 펼치기, 다른 연산이에요. 언제 펼치기냐 합치기냐를 정하는 방법은 "how to flatten the JSON data: JSON 데이터를 펼치고, 합치고, 중첩 그대로 두는 방법 (2026 가이드)"에서 다뤄요. 펼치기와 합치기의 선택은 데이터의 용도가 정해요. 분석하려면 펼치고, 요약하려면 합치세요. 기준이 명확하면 고민이 줄어요.
관련 가이드
- 중첩된 JSON을 CSV로 변환하는 방법: 평탄화 토글이 실제로 하는 일 (2026 가이드)
- how to flatten the JSON data: JSON 데이터를 펼치고, 합치고, 중첩 그대로 두는 방법 (2026 가이드)
- JSON 파일과 CSV 파일이란? 초보자를 위한 두 포맷 완전 가이드 (2026 가이드)
- What is JSON to CSV online? 세 단어를 풀이합니다 (2026 가이드)
- what is JSON to CSV converter online? 다섯 단계로 뜯어보는 온라인 변환기의 구조 (2026 가이드)
- JSON을 CSV로 로컬에서 변환하는 방법: 파일을 내 컴퓨터 안에 두는 법 (2026 가이드)
- JSON을 CSV로 로컬에서 변환하는 방법은? 6가지 방법 비교 (2026 가이드)
- CSV가 Excel에서 한 열로 열리는 이유와 해결 방법 (2026 가이드)
- Excel에서 CSV가 깨진 문자로 보이는 이유와 인코딩 해결 방법 (2026 가이드)
- Excel이 CSV 코드의 앞자리 0을 지우는 이유와 이를 지키는 방법 (2026 가이드)
- 엑셀에서 CSV 날짜가 바뀌는 이유와 날짜를 그대로 지키는 방법 (2026 가이드)
- 엑셀에서 CSV를 저장하면 파일이 바뀌는 이유와 원본을 안전하게 지키는 방법 (2026 가이드)
- 엑셀로 열리지 않는 큰 CSV 파일, 원인과 해결 방법 (2026 가이드)
자주 묻는 질문
JSON 평탄화가 뭔지 쉽게 설명해주세요.
중첩된 JSON을 다시 써서 더 이상 중첩되지 않게 만드는 거예요. 객체 속의 객체는 customer.city 같은 점 표기법 이름이 되고, 짧은 목록은 하나의 합쳐진 셀이 되며, 모든 값은 최상위 레벨에, 셀 하나에 하나씩 자리 잡아요. 결과는 평평한 표예요. CSV 파일과 스프레드시트가 필요로 하는 바로 그 모양이에요. 중첩을 없애되 값은 살리는 게 핵심이에요. 나무의 가지를 쳐서 판자로 만드는 것과 비슷해요. 재료는 그대로, 모양만 바뀌는 거예요.
JSON 평탄화는 minify와 같은 건가요?
아니요. 가장 흔한 혼동이에요. minify는 공백을 제거해서 한 줄로 길게 만들지만 여전히 완전히 중첩돼 있어요. 평탄화는 구조 자체를 바꿔서, 중첩된 값을 최상위 레벨로 끌어올려요. minify된 파일은 파싱하면 똑같은 트리가 나오지만, 평탄화된 파일은 더 얕은 다른 모양이에요. 헷갈리는 이유는 "flat"이라는 영어 단어가 일상에서는 "납작한"이라는 뜻으로도 쓰이기 때문이에요. 하지만 데이터 업계의 flat은 "중첩 없음"이라는 기술 용어예요.
JSON 파일을 평탄화하면 제 데이터가 바뀌나요?
모양은 바뀌고 값은 안 바뀌어요. 모든 말단 값은 살아남지만, 중첩은 점 표기법 컬럼이 되고, 목록은 이어진 텍스트가 되며, 타입은 텍스트로 무너지고, null은 빈 셀이 돼요. 원본 JSON은 원본으로 보관하고, 평탄화된 파일은 작업용 사본으로 쓰세요. 다만 "값이 살아남는다"는 말에도 조건이 있어요. 숫자는 텍스트가 되니까, 나중에 다시 숫자로 쓸 거면 타입 정보를 따로 메모해두는 게 좋아요.
JSON 평탄화와 펼치기의 차이는 뭔가요?
평탄화는 레코드당 한 행을 유지하고 컬럼을 넓혀요. 중첩 경로가 새 컬럼이 되는 거예요. 펼치기는 컬럼을 유지하고 행을 늘려요. 목록의 각 항목이 나머지 레코드와 함께 자기 행을 가지는 거예요. 태그 세 개인 고객을 평탄화하면 "tag1; tag2; tag3" 셀을 가진 한 행이 나오고, 펼치면 세 행이 나와요. 언제 뭘 고를지는 "how to flatten the JSON data: JSON 데이터를 펼치고, 합치고, 중첩 그대로 두는 방법 (2026 가이드)"에서 다뤄요. 기억하기 쉬운 구분법이 있어요. 행의 개수를 보세요. 평탄화는 행이 그대로고, 펼치기는 행이 늘어나요. 행이 늘어나면 펼치기, 그대로면 평탄화예요.
CSV 파일은 왜 평평한 데이터가 필요한가요?
CSV에는 행, 컬럼, 텍스트만 있기 때문이에요. 중첩을 둘 자리가 없어요. 셀은 객체를 담을 수 없고 문자만 담을 수 있어요. 그러니 중첩 구조는 평탄화되거나, 아니면 셀 안에 JSON 텍스트로 담기거나 해야 CSV에 살 수 있어요. 그래서 모든 JSON to CSV 변환기는 내부에 평탄화 엔진을 품고 있어요. 토글이 있든 없든, 중첩을 어딘가에 처리하지 않으면 CSV를 만들 수 없거든요.
CSV를 다시 중첩된 JSON으로 되돌릴 수 있나요?
대략적으로만 가능해요. customer.city 같은 점 표기법 컬럼은 스크립트로 중첩 객체로 다시 모을 수 있고, 그런 도구가 있긴 해요. 하지만 평탄화가 파괴한 정보는 사라져요. 합쳐진 목록은 배열로 믿고 나눌 수 없고, 타입은 추측이고, null과 누락의 구분은 알 수 없어요. 중첩이 다시 필요하면 원본 JSON을 보관하세요. 실무적인 조언 하나: 왕복이 필요할 것 같으면 처음부터 CSV를 만들지 마세요. JSON을 원본으로 두고, 필요할 때마다 그때그때 CSV를 뽑아내는 게 안전해요.
이 페이지의 JSON to CSV 변환기는 자동으로 평탄화하나요?
네, 평탄화는 기본적으로 켜져 있어요. 중첩된 JSON을 붙여넣으면 미리 보기에 점 표기법 컬럼이 바로 보여요. 끌 수도 있고, 그러면 중첩 객체와 배열은 단일 셀 안의 JSON 텍스트로 남아요. 스프레드시트 작업용으로는 켜두세요. 기본값이 켜져 있는 이유는, 이 변환기의 주 용도가 스프레드시트 작업이기 때문이에요. 대부분의 사용자가 원하는 출력이 평탄화된 표거든요.
평탄화가 일어나는 모습을 실시간으로 보세요
중첩된 JSON을 변환기에 붙여 넣고 평탄화가 점 표기법 열로 바꾸는 모습을 확인하세요. 무료이며, 회원 가입 없이, 브라우저 안에서 전부 실행됩니다.
JSON to CSV 변환기 열기