Python에서 JSON을 사용하는 방법

데이터 직렬화(Data serialization)는 데이터를 저장하거나 전송한 다음 나중에 재구성할 수 있는 형식으로 변환하는 프로세스입니다. 특히, JSON(JavaScript Object Notation)은 가독성과 사용 편의성으로 인기 있는 직렬화 형식 중 하나입니다.

Python에서 json 모듈은 JSON 데이터 작업에 대한 강력한 기능을 제공합니다. 이번 포스팅에서는 Python에서 JSON을 사용하는 방법 에 대해서 알아보겠습니다.

JSON 설명

JSON은 데이터를 key-value 쌍으로 표현합니다. 문자열, 숫자, 부울과 같은 간단한 데이터 유형부터 배열 및 중첩된 객체와 같은 더 복잡한 구조까지 지원합니다. 일반적인 JSON 파일은 다음과 같습니다.

{
    "name": "Alice",
    "age": 30,
    "skills": ["Python", "Data Analysis", "Machine Learning"],
    "projects": {
        "current": "Data Migration",
        "completed": ["API Development", "Web Scraping"]
    }
}


JSON 파일 읽기

위의 JSON을 프로젝트 디렉토리 루트에 data.json이라는 파일로 저장합니다. 이 JSON 데이터를 아래와 같이 Python에 로드할 수 있습니다.

import json

# JSON 파일을 열고, 로드함
with open("data.json", "r") as file:
    data = json.load(file)

# 로드된 데이터의 각 요소에 접근
print(f"Name: {data['name']}")
print(f"Current Project: {data['projects']['current']}")

----------------------------------------------------------------------

Name: Alice
Current Project: Data Migration


JSON 파일 쓰기

Python 데이터 구조를 JSON으로 저장하려면 json.dump를 사용합니다. 예를 들어 JSON 데이터를 쓰는 스크립트를 만들어 보겠습니다.

import json

# JSON 파일로 저장하기 위한 데이터 생성
data = {
    "name": "Bob",
    "age": 25,
    "skills": ["Java", "Spring Boot", "DevOps"],
    "projects": {
        "current": "System Upgrade",
        "completed": ["Automation", "Monitoring Setup"]
    }
}

# JSON 파일로 저장
with open("new_data.json", "w") as file:
    json.dump(data, file, indent = 4)

print("Data saved to new_data.json")

-------------------------------------------------------------------

Data saved to new_data.json


중첩된 JSON 작업

더 복잡한 JSON 데이터의 경우 키 또는 인덱스를 연결하여 중첩된 값에 액세스할 수 있습니다. 더 깊은 중첩을 포함하도록 data.json을 업데이트하겠습니다.

import json

# Load the updated 업데이트된 JSON 파일 로드
with open("data.json", "r") as file:
    data = json.load(file)

# 중첩된 데이터에 접근
api_details = data["projects"]["details"]["API Development"]
print(f"API Development Duration: {api_details['duration']}")
print(f"Team Size: {api_details['team_size']}")

----------------------------------------------------------------------

API Development Duration: 3 months
Team Size: 5


JSON 문자열을 Python 객체로 변환

때때로 JSON 데이터는 API에서와 같이 문자열로 제공됩니다. json.loads를 사용하여 JSON 문자열을 구문 분석하고 json.dumps를 사용하여 Python 객체를 문자열로 변환할 수 있습니다.

import json

# JSON 문자열
json_string = '{"name": "Charlie", "age": 35, "skills": ["C++", "Rust"]}'

# 문자열을 파이썬 객체로 변환
python_data = json.loads(json_string)
print(f"Name: {python_data['name']}")

# 파이썬 객체를 JSON 문자열로 변환
json_output = json.dumps(python_data, indent=2)
print(json_output)

-------------------------------------------------------------------------------
Name: Charlie
{
  "name": "Charlie",
  "age": 35,
  "skills": [
    "C++",
    "Rust"
  ]
}



key 접근하기

JSON 객체의 key는 Python의 딕셔너리 key 처럼 접근할 수 있습니다.

import json

# JSON 샘플 
json_string = '''
{
    "name": "Alice",
    "age": 30,
    "skills": ["Python", "Data Analysis"],
    "projects": {
        "current": "Data Migration",
        "completed": ["API Development", "Web Scraping"]
    }
}
'''

# JSON 문자열을 파이썬 딕셔너리로 변환 
data = json.loads(json_string)

# 키 접근
print(data["name"])  
print(data["projects"]["current"])  

------------------------------------------------------------------------

Alice
Data Migration


key 반복

JSON 객체의 모든 key를 반복하려면 아래와 같이 실행합니다.

# 최상위 key 반복
for key in data:
    print(f"Key: {key}, Value: {data[key]}")

-----------------------------------------------------------------------------------------------------------------

Key: name, Value: Alice
Key: age, Value: 30
Key: skills, Value: ['Python', 'Data Analysis']
Key: projects, Value: {'current': 'Data Migration', 'completed': ['API Development', 'Web Scraping']}


key 확인

key에 접근하기 전에 오류가 발생하지 않도록 key가 있는지 확인하는 것이 좋습니다.

if "skills" in data:
    print(f"Skills: {data['skills']}")
else:
    print("Key 'skills' not found.")

--------------------------------------------

Skills: ['Python', 'Data Analysis']


모든 key 나열하기

.keys()를 사용하면 JSON 객체의 모든 키를 가져올 수 있습니다.

# JSON의 모든 키 가져오기

keys = data.keys()
print(keys)  

--------------------------------------------------------------

dict_keys(['name', 'age', 'skills', 'projects'])

중첩된 key의 경우 개별적으로 접근해야 합니다.

nested_keys = data["projects"].keys()
print(nested_keys)  

--------------------------------------------------------------

dict_keys(['current', 'completed'])


key 추가 또는 제거

JSON의 Python 딕셔너리 표현에서 동적으로 key를 추가하거나 제거할 수 있습니다.


key 추가

data["department"] = "Data Science"
print(data["department"])  

---------------------------------------------

Data Science


key 제거

del data["age"]
print(data) # 아래 결과에서 "age" key 삭제되었음을 확인할 수 있습니다. 

-------------------------------------------------------------------------------

{'name': 'Alice', 'skills': ['Python', 'Data Analysis'], 'projects': {'current': 'Data Migration', 'completed': ['API Development', 'Web Scraping']}, 'department': 'Data Science'}


실제 사용 사례: 키 추출

중첩된 JSON이 있고 모든 key(중첩된 키 포함)를 추출하려면 재귀를 사용하면 됩니다.

def extract_keys(obj, parent_key=""):
    keys = []
    for key, value in obj.items():
        full_key = f"{parent_key}.{key}" if parent_key else key
        keys.append(full_key)
        if isinstance(value, dict):
            keys.extend(extract_keys(value, full_key))
    return keys

# key 추출 
all_keys = extract_keys(data)
print(all_keys)

-------------------------------------------------------------------------------------------

['name', 'skills', 'projects', 'projects.current', 'projects.completed', 'department']

이상으로 Python에서 JSON을 사용하는 방법 에 대해서 알아보았습니다.


답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다