JSON 데이터를 평탄화한다는 게 무슨 뜻인가요
CSV는 평평해요. 행과 열만 있을 뿐이에요. JSON은 나무 모양이에요. 객체 안에 객체가 있고, 객체 안에 목록이 있고, 목록 안에 객체가 있어요. how to flatten the JSON data를 묻는 건 결국 이 나무를 정보를 잃지 않고 표로 바꾸는 방법을 묻는 거예요. 모든 평탄화 도구는 같은 세 가지 동작을 하고, 이 세 가지를 이름으로 구분할 수 있게 되면 어떤 도구도 예측 가능해져요.
세 가지 동작은 이래요. 중첩 객체는 점 표기법 컬럼이 되고(customer가 customer.name과 customer.city가 돼요), 평범한 값만 들어간 목록은 합쳐진 한 셀이 되고(items가 book; pen이 돼요), 분석해야 할 목록은 항목당 한 행이 되는데, 이걸 펼치기(explode)라고 불러요. 어떤 목록에 어떤 동작을 적용할지가 진짜 실력이고, 이건 기본값이 아니라 결정이에요.
본격적으로 시작하기 전에 구분 하나가 중요해요. 중첩된 JSON을 CSV로 바꾸는 방법에 대한 이전 가이드에서는 이 사이트 변환기의 평탄화 토글이 셀 단위로 정확히 무엇을 하는지, 엣지 케이스까지 문서화했어요. 이 가이드는 작업 자체에 대한 거예요. 중첩된 JSON 데이터가 있고, 평평한 표를 원하고, 각 부분을 어떻게 펼칠지 어떤 도구에서든 직접 고를 수 있는 상황을 다루는 거예요. 토글이 없는 도구에서도요.
실습 예제: 중첩된 주문 세 건
이 가이드의 모든 예제는 같은 작은 샘플을 써요. 중첩된 고객 객체와 items 목록, 그리고 세 번째 주문에 들어간 빈 목록이 있는 주문 세 건이에요. 손으로 직접 확인할 만큼 작고, 모든 결정을 보여줄 만큼 충분히 중첩돼 있어요.
[
{ "orderId": "A-101", "customer": { "name": "Ana", "city": "Madrid" }, "items": ["book", "pen"], "total": 19.99 },
{ "orderId": "A-102", "customer": { "name": "Ken", "city": "Osaka" }, "items": ["lamp"], "total": 42.50 },
{ "orderId": "A-103", "customer": { "name": "Lina", "city": "Berlin" }, "items": [], "total": 7.25 }
]1단계: 중첩 객체는 점 표기법 컬럼이 돼요
중첩 객체는 이름이 있는 필드들로 이뤄져 있어서, 평탄화는 기계적으로 진행돼요. 나무를 따라 내려가면서 키 이름을 점으로 이어주기만 하면 돼요. customer.name에는 Ana가 들어가고, customer.city에는 Madrid가 들어가요. 원래의 중첩 구조는 사라지지만 잃는 건 없어요. 점으로 이어진 이름이 원본까지의 전체 경로를 그대로 기록하고 있기 때문이에요.
이 동작은 모든 도구가 똑같이 해요. 온라인 변환기도 하고, pandas의 json_normalize도 하고, jq도 경로를 명시적으로 지정하면 해요. 판단이 필요한 부분은 깊이뿐이에요. 점이 한두 단계면 읽기 편하지만, 점이 네 단계(a.b.c.d)까지 이어지면 보통 표의 한 행이 되도록 만들어진 구조가 아니라는 뜻이고, 그런 경우는 아래 깊이 관련 섹션에서 다뤄요.
orderId,customer.name,customer.city,items,total
A-101,Ana,Madrid,book; pen,19.99
A-102,Ken,Osaka,lamp,42.50
A-103,Lina,Berlin,,7.252단계: 짧은 목록은 한 셀에 합쳐요
평범한 값만 들어간 목록, 즉 중첩이 없는 문자열이나 숫자들의 목록은 구분자로 이어서 한 셀에 넣으면 평탄화돼요. 이 사이트 변환기는 세미콜론 뒤에 공백을 붙여서 합쳐요(book; pen). 세미콜론을 쓰는 건 의도된 선택이에요. 쉼표는 CSV 구분자와 충돌하지만, 셀 안의 세미콜론은 뜻이 분명하고 Excel을 거쳐 다시 돌아와도 깨지지 않아요.
합치기를 하면 레코드당 한 행이 유지돼요. 목록이 분석 대상이 아니라 맥락일 때 원하는 형태예요. 글의 태그, 프로필의 기술, 상품의 카테고리가 여기에 해당해요. 읽을 수는 있고, 필터에도 쓸 수 있지만, 개별 값을 합산하거나 셀 일은 없어요. 그런 목록은 합치세요.
orderId,items
A-101,book; pen
A-102,lamp
A-103,3단계: 목록을 항목당 한 행으로 펼쳐요
펼치기는 대부분이 놓치는 동작이에요. 대부분의 변환기가 아예 제공하지 않기 때문이에요. 목록을 한 셀에 욱여넣는 대신, 항목마다 한 행을 만들고 부모 필드를 모든 행에 반복해요. 주문 A-101은 항목이 두 개라서 행이 두 개가 돼요. book 행 하나, pen 행 하나이고, 각 행에는 Ana, Madrid, 19.99가 그대로 들어가요. 주문 세 건은 행 네 개가 돼요. A-103의 빈 목록도 항목이 비어 있는 행 하나를 만들기 때문에, 주문 자체가 조용히 사라지지 않아요.
목록 자체가 분석 단위일 때 펼쳐요. 합산할 주문 상세 항목, 셀 이벤트, 필터링할 거래 내역이 여기에 해당해요. 그런 목록을 합쳐버리면 항목별 숫자가 텍스트 셀 안에 갇혀서, 어떤 스프레드시트 수식으로도 깔끔하게 되살릴 수 없어요. 경험 법칙은 이래요. 목록 안의 개별 값으로 필터링하거나 세거나 합산할 일이 있으면 펼치고, 목록을 통째로 읽기만 할 거면 합치세요.
펼치면 실습 예제는 헤더를 포함해서 다섯 줄이 돼요. A-101이 두 번(book, 그다음 pen), A-102가 한 번(lamp), A-103이 항목이 비어 있는 채로 한 번 나와요. 주문 필드가 모든 행에 반복되는데, 중복처럼 보이지만 그게 핵심이에요. 각 행이 이제 분석 가능한 하나의 사실이 됐기 때문이에요.
펼칠까요, 합칠까요? 목록의 의미로 결정해요
펼치기냐 합치기냐 결정은 평탄화가 조용히 잘못되는 지점이에요. 두 결과 모두 올바른 CSV처럼 보이기 때문이에요. 주문 상세 항목을 합친 목록도 Excel에서 잘 열리고, 항목별 가격이 이제 복구 불가능한 텍스트가 됐다는 경고는 아무것도 띄우지 않아요. 평탄화하기 전에 목록마다 질문 하나씩만 던지면 선택은 스스로 정해져요. 이 결정은 파일마다 다시 내려야 해요. 같은 items라는 목록이라도 주문 분석에서는 펼쳐야 하고, 상품 목록을 한눈에 보는 용도에서는 합치는 게 맞을 수 있어요. 목록 이름만 보고 정하지 말고, 그 목록으로 무엇을 셀지, 무엇을 합산할지, 무엇을 필터링할지를 먼저 정하세요. 그 답이 정해지면 아래 목록의 질문에 그대로 대입하면 돼요.
- 이 목록 안의 개별 값으로 필터링하거나 세거나 합산할 일이 있나요? 있다면 펼쳐요. 주문 상세 항목, 이벤트, 거래 내역, 측정값이 모두 여기에 해당해요.
- 이 목록을 통째로 읽기만 하나요? 그렇다면 합치세요. 태그, 카테고리, 기술, 라벨이 모두 여기에 해당해요.
- 잘 모르겠나요? 펼쳐요. 펼친 표는 다시 그룹화해서 합친 셀로 되돌릴 수 있지만, 합친 셀은 행으로 다시 믿을 만하게 나눌 수 없어요. 구분자가 값 안에도 들어 있을 수 있기 때문이에요.
- 목록에 평범한 값이 아니라 객체가 들어 있나요? 그러면 두 동작 모두 바로 적용되지 않아요. 객체 목록은 합치면 JSON 텍스트 셀이 되고, 펼치려면 먼저 필드를 점 표기법으로 만들어야 해요. 그런 경우는 깊이 관련 섹션을 보세요.
어디까지 평탄화해야 할까요
잎까지 전부 평탄화하면 꼼꼼해 보이지만, 결과는 최악의 표예요. 점이 네 단계까지 이어진 컬럼이 수십 개 생기고, 대부분 비어 있고, 읽을 수도 없어요. 실제로 쓸 깊이까지만 평탄화하세요. 필터링하거나 정렬할 필드는 컬럼으로 만들고, 맥락 속에서 읽기만 할 하위 구조는 JSON 텍스트 셀 하나로 남겨두세요. 깊은 컬럼이 많아질수록 표는 더 희박해져요. 중첩이 깊은 필드는 레코드마다 모양이 달라서 대부분의 행에서 비어 있고, 정렬이나 필터를 걸어도 빈 셀만 잔뜩 보게 돼요. 컬럼이 수십 개가 되면 원하는 열을 찾는 일 자체가 일이 되고, 스프레드시트에서 가로로 스크롤하면서 비교하기도 어려워져요. 그래서 깊이는 꼼꼼함이 아니라 비용이에요. 분석에서 실제로 필터링하거나 정렬하거나 그룹으로 묶을 필드만 컬럼으로 만들고, 나머지는 원본 구조 그대로 두는 편이 표를 쓸 만하게 유지해요.
실용적인 멈춤 기준은 이래요. 두세 단계 깊이까지 평탄화하고, 그보다 깊은 건 JSON 텍스트로 남겨두세요. 예를 들어 배송 추적 객체들의 목록은 진짜 데이터지만, 컬럼에 들어갈 일은 거의 없어요. JSON 텍스트가 들어간 추적 셀 하나가 표를 읽기 쉽게 유지해 주고, 원본 JSON 파일이 전체 세부 정보를 그대로 간직해요. 평탄화된 CSV는 데이터의 파생 뷰이지 대체물이 아니니, 원본 JSON 파일을 꼭 남겨두세요. 이 기준을 적용하면 판단이 쉬워져요. 주문의 고객 이름이나 도시처럼 매번 보고 거르는 값은 컬럼으로 만들고, 배송 추적처럼 가끔 열어보는 이력은 JSON 텍스트 셀 하나로 남겨두는 식이에요. JSON 텍스트 셀은 읽을 수 있고 원본 구조도 그대로 간직해요. 나중에 그 안의 값이 분석 대상이 되면 원본 JSON 파일에서 다시 평탄화하면 돼요. CSV를 다시 손으로 고쳐서 구조를 되살리려 하면 시간만 들고 실수가 생기니, 처음부터 원본을 남겨두는 습관이 중요해요.
덜컹거리는 데이터: 빠진 키, 빈 목록, null
실제 JSON은 고르지 않아요. 어떤 레코드에는 있는 필드가 다음 레코드에는 없고, 어떤 목록은 비어 있고, 어떤 값은 null이에요. 평탄화는 이 세 가지를 모두 같은 단순한 규칙으로 처리하고, 단순한 게 좋아요. 헤더 행은 데이터 어딘가에라도 등장한 모든 키의 합집합이고, 키가 빠진 레코드는 그 자리에 빈 셀을 받아요. 오류도 없고, 빠지는 행도 없고, 눈에 보이는 빈 셀만 있어요.
빈 목록과 null도 두 동작 모두에서 같은 규칙을 따라요. 합치면 빈 목록은 빈 셀이 돼요. 펼치면 빈 목록도 항목이 비어 있는 행 하나를 만들어서 부모 레코드가 살아남아요. 목록 안의 null은 구분자 사이의 빈 구간이 돼요. mug, null, plate로 이뤄진 목록은 mug; ; plate로 합쳐지고, null이 있던 자리에는 빈틈이 정확히 보여요.
orderId,items
A-101,book; pen
A-103,mug; ; plate레시피 1: Python, json_normalize에 explode 더하기
Python에 pandas를 더한 방법이 가장 관대해요. json_normalize가 객체를 평탄화하고, explode가 목록을 처리하니까 읽기 쉬운 코드 두 줄이면 되기 때문이에요. 세 건 주문 샘플에 실행하면 json_normalize가 orderId, items, total, customer.name, customer.city 컬럼을 만들었고, items에 대한 explode가 행 3개를 4개로 만들었어요. 빈 목록은 항목이 비어 있는 행 하나를 남겼어요.
import json
import pandas as pd
rows = json.load(open('orders.json'))
df = pd.json_normalize(rows)
flat = df.explode('items')
flat.to_csv('orders-flat.csv', index=False)펼치기 대신 합치기를 원하면 explode 줄을 빼면 돼요. json_normalize는 목록을 목록 그대로 남기고, 한 줄짜리 합치기가 그걸 세미콜론으로 구분된 셀로 바꿔줘요. 같은 스크립트로 두 결정 모두를 다룰 수 있으니, 평탄화가 일회성이 아닐 때는 이 레시피를 먼저 꺼내세요.
레시피 2: jq, 한 명령으로 펼치기
jq는 스크립트 파일도, jq 자체 외의 의존성도 없이 한 명령으로 목록을 펼쳐요. 아래 레시피는 각 주문을 변수에 묶고, items 목록이 비어 있는지 확인한 뒤, 비어 있으면 항목이 비어 있는 행 하나를, 비어 있지 않으면 항목당 한 행씩 내보내요. 실습 예제에 실행하면 펼치기 섹션에서 설명한 대로 정확히 다섯 줄 출력이 나왔어요. A-101 두 번, A-102 한 번, A-103 항목 비어 있는 채로 한 번이에요.
jq -r '. as $rows | (["orderId","name","city","item","total"] | @csv), ($rows[] | . as $o | if (.items | length) == 0 then [$o.orderId, $o.customer.name, $o.customer.city, "", $o.total] | @csv else (.items[] | [$o.orderId, $o.customer.name, $o.customer.city, ., $o.total] | @csv) end)' orders.json빈 목록 분기는 온라인에 떠도는 대부분의 jq 펼치기 레시피가 빼먹는 부분이고, 데이터를 잃게 만드는 부분이기도 해요. 이 분기가 없으면 항목이 없는 주문이 출력에서 완전히 사라져요. 지금 데이터에 빈 목록이 없더라도 이 분기를 유지하세요. 다음 파일에는 있을 거예요.
레시피 3: Excel Power Query, 코드 없이
어차피 목적지가 Excel이라면 Power Query로 코드 없이 JSON을 평탄화할 수 있어요. 데이터, 데이터 가져오기, 파일에서, JSON에서 순서로 가져오면, Power Query가 각 레코드를 행으로 보여주고 중첩된 컬럼은 아직 접힌 상태로 남아 있어요. 두 가지 확장 동작이 이 가이드의 두 가지 목록 동작과 정확히 대응하고, 잘못 고르면 어떤 도구에서든 같은 실수가 돼요.
- 레코드 컬럼(customer)을 확장 화살표로 펼치고 원하는 필드에 체크하세요. name과 city가 일반 컬럼이 돼요. 이게 1단계예요.
- 목록 컬럼(items)을 확장 화살표로 펼치고 새 행으로 확장을 선택하면 펼쳐져요. 항목당 한 행이 되고 부모 필드가 반복돼요. 이게 3단계예요.
- 목록 컬럼을 펼치고 값 추출을 선택한 뒤 세미콜론 공백 구분자를 지정하면 한 셀에 합쳐져요. 이게 2단계예요.
- 평평해질 때까지 중첩된 컬럼마다 반복한 뒤 닫기 및 로드를 누르세요.
레시피 4: 온라인 변환기, 합치기는 되지만 펼치기는 안 돼요
이 사이트의 무료 변환기는 평탄화 토글을 켜면 이렇게 평탄화해요. 중첩 객체는 점 표기법 컬럼이 되고, 목록은 세미콜론으로 구분된 셀에 합쳐져요. 정확히 1단계와 2단계예요. 토글을 끄면 중첩된 값은 셀 안에 JSON 텍스트로 그대로 남는데, 이게 제목에 나온 중첩 그대로 두기 옵션이에요. 변환기가 하지 않는 일은 펼쳐요. 주문 하나를 항목당 한 행으로 바꾸는 옵션이 없어요.
이건 버그가 아니라 솔직한 한계예요. 펼치기는 행 수를 바꾸는 데이터 모델링 결정이라서, 클릭 한 번짜리 변환기가 조용히 대신 정해서는 안 돼요. 목록을 펼쳐야 한다면 위의 Python이나 jq 레시피를 쓰고, 합치기가 맞는 수많은 파일에는 변환기를 쓰세요.
다시 중첩 형태로 되돌릴 수 있나요
평탄화는 객체는 되돌리기 쉽고, 펼친 목록은 정확히 되돌리기가 어려우니 미리 계획하세요. 점으로 이어진 컬럼은 작은 스크립트로 중첩 객체로 다시 쪼개지고, 점이 전체 경로를 기록했으니 잃는 게 없어요. 펼친 행은 부모 키로 그룹화해서 항목을 다시 목록으로 모을 수 있지만, 원래 항목 순서는 행 인덱스를 남겨뒀을 때만 살아남고, 원래 빈 목록은 빠진 목록과 구분이 안 돼요. 되돌리기를 직접 해보면 차이가 더 분명해져요. 점 표기법 컬럼은 점을 기준으로 나누고 다시 객체로 묶으면 원래 모양이 돌아오고, 경로가 이름에 남아 있어서 어떤 값이 어디에 속했는지 헷갈릴 일이 없어요. 펼친 행은 부모 키로 묶어서 목록으로 다시 모을 수는 있지만, 행이 만들어진 순서가 원래 목록 순서와 같은지 보장되지 않고, 빈 목록이었던 레코드와 목록 키 자체가 없었던 레코드가 같은 모양으로 보여요. 그래서 펼치기를 되돌릴 때는 원래 순서와 빈 목록 여부를 별도로 기록해 두지 않으면 완전한 복원이 어려워요.
실용적인 규칙은 여기서 따라 나와요. 평탄화된 CSV를 유일한 사본으로 여기지 마세요. 원본 JSON 파일을 남기고, CSV는 한 번의 분석을 위해 만든 파생 뷰로 취급하고, 분석이 바뀌면 JSON에서 다시 평탄화하세요. 저장 공간은 싸고, 원본에서 다시 만드는 게 구조를 조용히 잃어버린 CSV를 디버깅하는 것보다 나아요. 이 규칙은 작업 순서를 바꿔줘요. CSV를 만들고 나서 원본 JSON을 지우면, 분석 조건이 바뀔 때마다 잃어버린 구조를 추측해서 복원해야 해요. 반대로 원본 JSON을 남겨두면 분석 단위가 바뀌어도 다시 평탄화하면 되고, 그때마다 펼치기냐 합치기냐를 새로 정할 수 있어요. 저장 공간은 싸고 다시 만드는 일은 빠르지만, 한 번 잃어버린 구조를 CSV만 보고 되찾는 일은 느리고 정확하지 않아요.
평탄화 체크리스트
JSON 파일을 평탄화하기 전에 이 여섯 가지 확인을 거치세요. 1분이면 끝나고, 이 가이드의 모든 실패 방식을 잡아내요. 순서는 그대로 따라가면 돼요. 먼저 분석 단위를 정하고, 그다음 깊이와 목록 처리 방식을 정하고, 마지막으로 덜컹거리는 데이터와 점 충돌, 원본 보관 여부를 확인해요. 이 순서대로 확인하면 펼치기와 합치기 선택이 서로 어긋나지 않고, 나중에 표를 다시 만들 때도 같은 기준으로 반복할 수 있어요. 하나라도 건너뛰면 그 항목이 나중에 CSV에서 조용히 틀어지는 원인이 되기 쉬워요.
- 먼저 분석 단위를 정하세요. 주문당 한 행, 항목당 한 행, 이벤트당 한 행 중 어느 건가요? 그 답이 모든 목록의 펼치기냐 합치기냐를 정해요.
- 객체는 필터링하거나 정렬할 깊이까지만 평탄화하고, 더 깊은 하위 구조는 JSON 텍스트로 남겨두세요.
- 모든 목록을 확인하세요. 평범한 값 목록은 합치기나 펼치기가 깔끔하지만, 객체 목록은 어느 동작이든 의미가 있으려면 먼저 필드를 점 표기법으로 만들어야 해요.
- 덜컹거리는 데이터를 예상하세요. 빠진 키는 빈 셀이 되고, 빈 목록은 비어 있는 행 하나나 셀이 되고, null은 빈 구간이 돼요.
- 키 이름 안의 점을 조심하세요. version.2 같은 키는 같은 이름의 중첩 경로와 충돌하고, 둘 중 하나가 조용히 이겨요.
- 원본 JSON을 남겨두세요. 평탄화된 CSV는 파생 뷰이지 원본이 아니에요.
관련 가이드
- 중첩된 JSON을 CSV로 변환하는 방법: 평탄화 토글이 실제로 하는 일 (2026 가이드)
- JSON을 CSV로 변환하는 방법: 확실한 3가지 방법 (2026 가이드)
- JSON 파일을 CSV로 변환하는 방법: 업로드, Excel, 명령줄 (2026 가이드)
- JSON을 CSV로 변환하는 방법이 있나요? 네 — 상황에 맞게 고르는 5가지 방법 (2026 가이드)
- JSON to CSV 온라인 변환 방법: 이 탭에서 30초 만에 끝내는 법 (2026 가이드)
- json to csv converter download: 실제로 다운로드해야 할 것 (2026 가이드)
- Convert Large JSON to CSV Online Free: 대용량 파일, 어디까지 변환할 수 있을까요? (2026 가이드)
- JSON 파일과 CSV 파일이란? 초보자를 위한 두 포맷 완전 가이드 (2026 가이드)
- What does flattening a JSON mean? JSON 평탄화의 의미 해설 (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.name)이 되고, 평범한 값의 목록은 한 셀에 합쳐지거나(book; pen) 항목당 한 행으로 펼쳐지고, 평탄화하지 않은 건 셀 안에 JSON 텍스트로 남아요. 어떤 부분을 펼치고 어떤 부분을 합칠지는 목록마다 따로 정해요. 분석 대상인 목록은 펼치고, 읽기만 할 목록은 합치는 게 기본 원칙이에요. 이 세 가지 동작을 구분하면 어떤 도구에서도 같은 결과를 예측할 수 있어요.
CSV로 변환하기 전에 중첩된 JSON을 평탄화해야 하나요?
네, CSV 셀 안에 JSON 텍스트를 남기고 싶지 않다면요. CSV에는 중첩이 없어서, 중첩 데이터는 평탄화하거나 합치거나 텍스트로 남겨야 해요. 토글을 켜고 평탄화하면 필터링하고 정렬할 수 있는 진짜 컬럼을 얻고, 토글을 끄면 중첩된 값이 읽기 쉬운 JSON 텍스트로 한 셀에 남아요.
JSON 배열을 항목당 한 행으로 펼치려면 어떻게 해요?
펼치세요. Python에서는 pd.json_normalize(rows) 뒤에 df.explode("items")를 쓰세요. jq에서는 각 레코드를 변수에 묶고 항목당 한 행씩 내보내되, 항목이 없는 레코드가 빠지지 않도록 빈 목록 분기를 명시적으로 넣으세요. 두 레시피 모두 이 가이드에 있고, 실습 예제로 검증했어요. 펼친 뒤에는 부모 필드가 모든 행에 반복되는지, 빈 목록이 있던 레코드가 항목이 비어 있는 행 하나로 남아 있는지 확인하세요. 이 두 가지가 맞으면 행 수는 항목 수의 합과 같아지고, 원래 레코드가 사라지지 않아요. 합치기와 헷갈리면 다시 떠올리세요. 펼치기는 행을 늘리고, 합치기는 셀 하나에 값을 모아요.
Python에서 JSON을 평탄화하려면 어떻게 해요?
pandas를 쓰세요. 파일을 json.load로 읽고, pd.json_normalize(rows)로 중첩 객체를 점 표기법 컬럼으로 펼친 뒤, 목록 컬럼은 구분자로 합치거나 df.explode("items")로 항목당 한 행으로 펼치세요. pandas 없이 중첩 객체만 처리한다면, 점으로 이어진 키를 만드는 작은 재귀 평탄화 함수로도 같은 일을 할 수 있어요. 실습 예제처럼 작은 파일로 먼저 결과를 확인하면 좋아요. json_normalize가 만든 컬럼 이름이 예상한 점 표기법과 같은지, explode 뒤에 행 수가 항목 수만큼 늘었는지, 빈 목록이 비어 있는 행 하나로 남아 있는지를 순서대로 보면 돼요. 이 확인이 끝나면 같은 스크립트를 큰 파일에도 그대로 쓸 수 있어요.
Excel에서 JSON을 평탄화하려면 어떻게 해요?
Power Query를 쓰세요. 데이터, 데이터 가져오기, 파일에서, JSON에서 순서로 가져오세요. 레코드 컬럼을 확장하면 중첩 객체가 평탄화되고, 목록 컬럼은 새 행으로 확장으로 펼치거나 값 추출로 합칠 수 있어요. 중첩된 컬럼마다 반복한 뒤 닫기 및 로드를 누르세요.
JSON을 평탄화할 때 빈 목록과 null은 어떻게 되나요?
오류가 아니라 빈 셀이나 빈 구간이 돼요. 빠진 키는 빈 셀이 되고, 빈 목록은 합치면 빈 셀이, 펼치면 항목이 비어 있는 행 하나가 되고, null은 빈 셀이 되고, 목록 안의 null은 구분자 사이의 빈 구간이 돼요(mug; ; plate). 그래서 평탄화 뒤에 빈 셀이 보인다고 해서 데이터가 깨진 건 아니에요. 빈 셀은 값이 없었다는 사실 자체를 보여주는 거예요. 다만 빈 셀과 값이 있던 자리를 구분해야 할 때는 원본 JSON에서 해당 레코드를 확인하세요. 특히 펼친 표에서는 빈 항목 행이 원래 빈 목록이었는지, 목록 키가 없었던 건지를 CSV만으로는 알 수 없어서 원본 확인이 필요해요.
아무것도 설치하지 않고 온라인으로 JSON을 평탄화할 수 있나요?
네. 무료 온라인 변환기에 JSON을 붙여넣거나 파일을 업로드하고 평탄화를 켜세요. 중첩 객체는 점 표기법 컬럼이 되고, 목록은 한 셀에 합쳐져요. 목록을 항목당 한 행으로 펼쳐야 한다면 이 가이드의 Python이나 jq 레시피를 쓰세요. 온라인 변환기는 목록을 합치지, 펼치지는 않기 때문이에요.
중첩된 JSON이 있나요? 브라우저에서 무료로 평탄화하세요
JSON을 붙여넣거나 파일을 업로드하세요. 중첩 객체는 점 표기법 컬럼으로 평탄화되고, 목록은 깔끔한 셀에 합쳐지고, 다운로드되는 건 일반 UTF-8 파일이에요. 무료이고, 가입도 필요 없고, 브라우저 안에서만 실행돼요.
JSON-CSV 변환기 열기