Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 여러 키·하위 키가 있는 JSON 파일을 반복 처리하는 방법

Python에서는 json 모듈을 사용해 JSON 파일을 간편하게 파싱할 수 있습니다. 이 모듈은 JSON 데이터를 해석하여 딕셔너리(dict) 객체로 변환해 주기 때문에, 변환된 데이터는 일반 딕셔너리와 완전히 같은 방식으로 다룰 수 있습니다.

예를 들어, 아래와 같은 내용을 담고 있는 JSON 파일이 있다고 가정해 보겠습니다.

{
    "id": "file",
    "value": "File",
    "popup": {
        "menuitem": [
            {"value": "New", "onclick": "CreateNewDoc()"},
            {"value": "Open", "onclick": "OpenDoc()"},
            {"value": "Close", "onclick": "CloseDoc()"}
        ]
    }
}

예제

이 파일을 파이썬 프로그램으로 불러온 뒤, 최상위 키를 순회하는 방법은 다음과 같습니다.

import json

f = open('data.json')
data = json.load(f)
f.close()

# 이제 data를 일반 딕셔너리처럼 사용할 수 있습니다.
for k, v in data.items():
    print("Key: " + k)
    print("Value: " + str(v))

실행 결과

위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.

Key: id
Value: file
Key: value
Value: File
Key: popup
Value: {'menuitem': [{'value': 'New', 'onclick': 'CreateNewDoc()'}, {'value': 'Open', 'onclick': 'OpenDoc()'}, {'value': 'Close', 'onclick': 'CloseDoc()'}]}

하위 키까지 재귀적으로 순회하기

최상위 키뿐만 아니라 중첩된 하위 값들까지 모두 탐색하고 싶다면, 트리 구조의 딕셔너리를 재귀적으로 순회하는 함수를 직접 작성해야 합니다. 아래는 그 대표적인 예시입니다.

def iter_dict(d):
    for k, v in d.items():
        print("Key: " + k)
        if isinstance(v, dict):
            iter_dict(v)  # 값이 딕셔너리면 재귀 호출로 계속 탐색
        else:
            print("Value: " + str(v))

iter_dict(data)

이렇게 하면 중첩된 JSON 구조 안에 있는 모든 키와 값을 빠짐없이 확인할 수 있습니다. 또한 파일을 열 때 with open('data.json') as f: 구문을 사용하면 파일이 자동으로 닫히므로, 리소스 누수 없이 더 안전한 코드를 작성할 수 있습니다.