어제 오늘 내일

[Python 실전] "복잡한 JSON도 척척!" 중첩 딕셔너리 데이터 추출 기술 본문

IT/Python

[Python 실전] "복잡한 JSON도 척척!" 중첩 딕셔너리 데이터 추출 기술

hi.anna 2026. 6. 7. 08:48

1. 중첩 구조 접근의 정석 (계단식 접근)

JSON 데이터는 보통 딕셔너리와 리스트가 층층이 쌓인 구조입니다. 대괄호[]를 연달아 써서 안쪽으로 들어갈 수 있습니다.

📌 예제 코드: 기상청 API 데이터 가공하기 (가상)

weather_json = {
    "status": "OK",
    "result": {
        "location": "Seoul",
        "forecast": [
            {"date": "2026-02-25", "temp": 12, "desc": "Sunny"},
            {"date": "2026-02-26", "temp": 8, "desc": "Rainy"}
        ]
    }
}

# '내일(26일)의 기온'을 가져오고 싶다면?
# 딕셔너리(result) -> 딕셔너리(forecast) -> 리스트의 두 번째[1] -> 딕셔너리(temp)
tomorrow_temp = weather_json["result"]["forecast"][1]["temp"]

print(f"내일 기온: {tomorrow_temp}도") # 8도

2. 에러 방지용 필수 기술:  체이닝

중첩 구조에서 가장 큰 문제는 중간에 키가 하나라도 없으면 코드가 멈춘다는 것입니다. 이를 방지하기 위해 get()을 연속으로 사용하거나 기본값을 빈 딕셔너리로 주는 팁이 있습니다.

📌 팁 1: 안전하게 파고들기

# 'description' 키가 없을 수도 있는 상황이라면?
# 중간에 None이 반환되면 다음 get에서 에러가 날 수 있으므로 빈 딕셔너리{}를 기본값으로 줍니다.
desc = weather_json.get("result", {}).get("forecast", [{}])[0].get("desc", "정보 없음")

3. 고수의 도구:  라이브러리 (강력 추천)

만약 구조가 너무 깊고 복잡하다면, 파이썬 기본 기능만으로는 코드가 매우 지저분해집니다. 이때 glom이라는 라이브러리를 사용하면 마치 파일 경로를 적듯 데이터를 추출할 수 있습니다.

📌 예제 코드: glom으로 한 줄에 추출하기

# pip install glom
from glom import glom

target_path = 'result.forecast.1.temp'
temp = glom(weather_json, target_path)

print(temp) # 8

4. 실전 활용: 데이터 전처리 (리스트 컴프리헨션 콜라보)

중첩 구조 안에 있는 특정 값들만 모아서 새로운 리스트를 만들 때 가장 많이 사용됩니다.

📌 예제 코드: 모든 날짜의 기온만 리스트로 뽑기

# forecast 리스트 안의 모든 딕셔너리에서 'temp'만 추출
all_temps = [f["temp"] for f in weather_json["result"]["forecast"]]

print(all_temps) # [12, 8]

📝 중첩 데이터 파싱 핵심 요약

  1. 구조 파악: 먼저 데이터의 어디가 딕셔너리{}이고 어디가 리스트[]인지 구분하세요.
  2. 안전 우선: 실무에서는 json["key"]보다는 json.get("key", {})처럼 기본값을 설정하는 습관이 프로그램을 튼튼하게 만듭니다.
  3. 반복문 활용: 리스트 형태의 중첩 데이터는 리스트 컴프리헨션으로 가공하는 것이 가장 빠르고 깔끔합니다.

 

반응형
Comments