데이터 직렬화(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을 사용하는 방법 에 대해서 알아보았습니다.