JSON 평탄화
중첩 JSON을 점 구분 단일 키로 펼치고 필요할 때 다시 원래 구조로 복원할 수 있습니다. 모든 변환은 브라우저에서 안전하게 처리됩니다.
관련 추천
사용 사례
- MongoDB 쿼리와 업데이트: 중첩 필드를 점 표기 키로 바꿔 검색 조건과 업데이트 경로에 바로 사용
- CSV와 Excel 내보내기: 다층 JSON을 단일 계층으로 펼쳐 표 형식 데이터로 정리
- Elasticsearch 적재 전 정리: 깊은 중첩 문서를 검색과 인덱싱에 유리한 평탄 구조로 변환
- API 디버깅: 요청과 응답의 필드 차이를 단일 키 기준으로 빠르게 비교
- 설정과 환경 변수 전처리: package.json, settings.json 같은 중첩 설정을 펼쳐 주입하기 쉽게 정리
이용 방법
- 왼쪽 입력창에 JSON을 붙여넣거나 로컬 .json 파일을 업로드합니다
- 평탄화 또는 복원 모드를 선택하고 구분자, 배열 처리, 최대 깊이를 설정합니다
- 오른쪽 출력창에서 결과와 키 수, 최대 깊이 통계를 확인합니다
- 필요하면 결과를 복사하거나 .json 파일로 다운로드합니다
주요 기능
- 양방향 변환: 평탄화와 언플래튼을 모두 지원해 중첩 구조와 단일 구조를 자유롭게 오갈 수 있습니다
- 구분자 사용자 지정: 점, 밑줄, 슬래시, 임의 문자로 변경해 다양한 후속 시스템에 맞출 수 있습니다
- 배열 처리 선택 가능: `items.0`처럼 인덱스로 펼치거나 배열 전체를 하나의 값으로 유지할 수 있습니다
- 최대 깊이 제한: 너무 깊은 중첩은 중간에서 멈춰 긴 키가 생기는 것을 줄여줍니다
- 로컬 처리로 안전: 모든 파싱과 변환이 브라우저 안에서 끝나므로 JSON이 서버로 업로드되지 않습니다
- 작업 효율 향상: .json 업로드, 예제 불러오기, 복사, 다운로드, 키 수 확인까지 한 번에 처리합니다
코드 예제
JavaScript로 JSON 평탄화하기
javascriptfunction flatten(obj, prefix = '', sep = '.') {
return Object.entries(obj).reduce((acc, [key, value]) => {
const newKey = prefix ? `${prefix}${sep}${key}` : key;
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
Object.assign(acc, flatten(value, newKey, sep));
} else {
acc[newKey] = value;
}
return acc;
}, {});
}
flatten({ user: { name: 'Alice', contact: { email: 'a@x.com' } } });
// => { 'user.name': 'Alice', 'user.contact.email': 'a@x.com' }Python으로 JSON 평탄화하기
pythondef flatten(obj, parent_key='', sep='.'):
items = {}
for key, value in obj.items():
new_key = f"{parent_key}{sep}{key}" if parent_key else key
if isinstance(value, dict):
items.update(flatten(value, new_key, sep))
else:
items[new_key] = value
return items
import json
print(json.dumps(flatten({'user': {'name': 'Alice'}}), indent=2))
# => {"user.name": "Alice"}명령줄에서 jq로 JSON 평탄화하기
bash# 중첩 JSON을 점 구분 플랫 구조로 변환
jq '[paths(scalars) as $p | {"key": $p | join("."), "value": getpath($p)}] | from_entries' data.json
# 플랫 JSON을 다시 중첩 구조로 복원
# jq 1.7+ 와 외부 필터 조합 또는 이 도구의 복원 모드를 사용자주 묻는 질문
JSON 평탄화란 무엇이며 언제 사용하나요?
JSON 평탄화는 중첩된 객체나 배열을 단일 계층의 키-값 쌍으로 바꾸는 작업입니다. MongoDB 점 표기 쿼리, CSV 내보내기, Elasticsearch 인덱싱, 환경 변수 생성, API 필드 비교 같은 상황에서 특히 유용합니다.
평탄화한 JSON을 다시 원래 중첩 구조로 복원할 수 있나요?
네. 구분자가 같다면 평탄화된 키를 다시 객체와 배열 구조로 거의 손실 없이 복원할 수 있습니다. 연속된 숫자 키는 자동으로 배열로 인식됩니다.
구분자를 바꿀 수 있나요? 배열은 어떻게 처리되나요?
가능합니다. 점, 밑줄, 슬래시, 이중 밑줄 등을 사용할 수 있습니다. 배열은 `items.0`처럼 펼치거나 전체 배열을 한 값으로 유지하는 방식 중에서 고를 수 있습니다.
온라인으로 처리해도 데이터가 안전한가요?
안전합니다. 모든 파싱과 변환이 로컬 브라우저 안에서 실행되므로 JSON 데이터가 외부 서버로 전송되지 않습니다.
MongoDB에서는 JSON 평탄화를 어떻게 활용하나요?
MongoDB는 중첩 필드를 점 표기법으로 참조합니다. 이 도구로 만든 키는 `find`, `update`, 집계 파이프라인의 필드 경로로 바로 사용할 수 있습니다.
평탄화한 JSON을 CSV나 Excel로 내보낼 수 있나요?
할 수 있습니다. 단일 계층 키-값 구조가 되므로 JSON to CSV 도구로 넘기거나 Excel, Pandas에서 열 이름으로 불러오기 쉬워집니다.
원래 키 이름에 점이나 구분자가 있으면 문제가 생기나요?
그럴 수 있습니다. 원래 키 이름에 구분자가 들어 있으면 복원할 때 계층 경로로 잘못 해석될 수 있습니다. 다른 구분자를 쓰거나 키를 미리 이스케이프하세요.
큰 JSON도 처리할 수 있나요?
일반적인 API 응답과 설정 파일은 무리 없이 처리됩니다. 매우 큰 JSON은 브라우저 메모리를 많이 쓰므로 파일을 나누거나 `jq` 같은 로컬 CLI 사용을 권장합니다.
문제 해결
입력이 올바른 JSON으로 인식되지 않습니다
따옴표 누락, 불필요한 쉼표, 닫히지 않은 괄호, True/False 같은 JSON 외 문법이 원인일 수 있습니다. 먼저 JSON 포맷 도구로 문법을 확인하세요.
언플래튼 결과의 계층이 뒤틀립니다
원래 키 이름에 선택한 구분자가 포함되어 있을 가능성이 높습니다. 다른 구분자를 사용하거나 변환 전에 키를 이스케이프하세요.
배열을 펼쳤더니 CSV 열이나 행이 너무 많아집니다
배열을 인덱스로 펼치면 열과 행 수가 크게 늘어날 수 있습니다. 표 형태가 우선이면 배열 전체를 유지하는 옵션을 사용하세요.
큰 JSON을 처리하면 브라우저가 느려집니다
대용량 JSON은 브라우저 메모리를 많이 사용합니다. 파일을 나누거나 `jq`, Python 스크립트 같은 로컬 CLI로 처리하는 편이 좋습니다.
- JSON 압축
- CSV 를 JSON으로
- JSON을 CSV로
- JSON Diff
- JSON Escape / Unescape
- JSON 평탄화
- JSON 포맷터
- JSON 생성기
- JSONPath 온라인 쿼리
- JSON 병합
- JSON 복구
- JSON 스키마 검증기
- JSON 정렬
- JSON Stringify
- JSON을 HTML로 변환
- JSON을 Java로
- JSON을 Markdown으로
- JSON을 SQL로 변환
- JSON을 TOML로 변환
- JSON을 TypeScript로 변환
- XML을 JSON으로
- JSON을 XML로 변환
- YAML을 JSON으로 변환
- JSON → YAML 변환
- JSON을 Go로
- JSON을 Rust로
- JSON → Swift
- JSON에서 C#로
- JSON을 C++로
- JSON을 PHP로
- JSON을 Python으로