JSON 평탄화

구분자:
최대 깊이:(0=unlimited)

중첩 JSON을 점 구분 단일 키로 펼치고 필요할 때 다시 원래 구조로 복원할 수 있습니다. 모든 변환은 브라우저에서 안전하게 처리됩니다.

관련 추천

사용 사례

  • MongoDB 쿼리와 업데이트: 중첩 필드를 점 표기 키로 바꿔 검색 조건과 업데이트 경로에 바로 사용
  • CSV와 Excel 내보내기: 다층 JSON을 단일 계층으로 펼쳐 표 형식 데이터로 정리
  • Elasticsearch 적재 전 정리: 깊은 중첩 문서를 검색과 인덱싱에 유리한 평탄 구조로 변환
  • API 디버깅: 요청과 응답의 필드 차이를 단일 키 기준으로 빠르게 비교
  • 설정과 환경 변수 전처리: package.json, settings.json 같은 중첩 설정을 펼쳐 주입하기 쉽게 정리

이용 방법

  1. 왼쪽 입력창에 JSON을 붙여넣거나 로컬 .json 파일을 업로드합니다
  2. 평탄화 또는 복원 모드를 선택하고 구분자, 배열 처리, 최대 깊이를 설정합니다
  3. 오른쪽 출력창에서 결과와 키 수, 최대 깊이 통계를 확인합니다
  4. 필요하면 결과를 복사하거나 .json 파일로 다운로드합니다

주요 기능

  • 양방향 변환: 평탄화와 언플래튼을 모두 지원해 중첩 구조와 단일 구조를 자유롭게 오갈 수 있습니다
  • 구분자 사용자 지정: 점, 밑줄, 슬래시, 임의 문자로 변경해 다양한 후속 시스템에 맞출 수 있습니다
  • 배열 처리 선택 가능: `items.0`처럼 인덱스로 펼치거나 배열 전체를 하나의 값으로 유지할 수 있습니다
  • 최대 깊이 제한: 너무 깊은 중첩은 중간에서 멈춰 긴 키가 생기는 것을 줄여줍니다
  • 로컬 처리로 안전: 모든 파싱과 변환이 브라우저 안에서 끝나므로 JSON이 서버로 업로드되지 않습니다
  • 작업 효율 향상: .json 업로드, 예제 불러오기, 복사, 다운로드, 키 수 확인까지 한 번에 처리합니다

코드 예제

JavaScript로 JSON 평탄화하기

javascript
function 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 평탄화하기

python
def 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로 처리하는 편이 좋습니다.