많은 웹 API에서는 데이터를 딕셔너리 형태의 문자열(JSON 객체)로 주고받습니다. 이렇게 수신한 데이터에서 의미 있는 정보를 추출하려면, 먼저 문자열을 파이썬의 딕셔너리(dictionary) 형태로 변환해야 이후 다양한 연산과 처리를 수행할 수 있습니다.
파이썬에서는 표준 라이브러리인 json 모듈을 사용하여 이 작업을 간단하게 처리할 수 있습니다. 핵심 함수는 다음 두 가지입니다.
- json.loads() : JSON 형식의 문자열 → 파이썬 객체(딕셔너리)로 변환
- json.dumps() : 파이썬 객체(딕셔너리) → JSON 형식의 문자열로 변환
예제 코드
아래 예제는 json.dumps()로 딕셔너리를 문자열로 만든 뒤, json.loads()를 사용해 다시 JSON 객체(딕셔너리)로 변환하는 과정을 보여줍니다.
# 문자열을 json으로 변환하기
# json.loads 사용
import json
# 초기 json 객체 생성
ini_string = {'vishesh': 1, 'ram': 5, 'prashant': 10, 'vishal': 15}
# 딕셔너리를 문자열로 직렬화(serialization)
ini_string = json.dumps(ini_string)
print("initial 1st dictionary", ini_string)
print("type of ini_object", type(ini_string))
# 문자열을 json 객체(딕셔너리)로 변환
dictionary = json.loads(ini_string)
# 최종 결과 출력
print("final dictionary", str(dictionary))
print("type of dictionary", type(dictionary))실행 결과
initial 1st dictionary {"vishal": 15, "ram": 5, "vishesh": 1, "prashant": 10}
type of ini_object <class 'str'>
final dictionary {'vishal': 15, 'ram': 5, 'vishesh': 1, 'prashant': 10}
type of dictionary <class 'dict'>코드 설명
1. json.dumps() – 직렬화(Serialization)
json.dumps()는 파이썬 딕셔너리를 JSON 형식의 문자열로 변환합니다. 실행 결과에서 확인할 수 있듯이, 변환 후 데이터 타입이 <class 'str'>로 변경됩니다. 실제 웹 환경에서는 API 응답이 대부분 이러한 문자열 형태로 전달됩니다.
2. json.loads() – 역직렬화(Deserialization)
json.loads()는 JSON 형식의 문자열을 다시 파이썬 딕셔너리로 변환합니다. 변환이 완료되면 데이터 타입이 <class 'dict'>가 되며, 이후 일반적인 딕셔너리처럼 키(key)를 사용해 값에 접근하거나 수정할 수 있습니다.
실전 활용 팁
실제 프로젝트에서는 외부에서 받은 문자열이 항상 올바른 JSON 형식이라고 보장할 수 없습니다. 잘못된 형식의 문자열을 변환하려 하면 json.JSONDecodeError가 발생하므로, 아래와 같이 예외 처리를 함께 사용하는 것이 안전합니다.
import json
raw_data = '{"name": "kim", "age": 30}'
try:
data = json.loads(raw_data)
print(data["name"]) # kim
except json.JSONDecodeError:
print("유효하지 않은 JSON 형식입니다.")이처럼 json.loads() 하나만 제대로 이해해도 웹 API 응답 처리, 설정 파일 로딩 등 다양한 상황에서 문자열 데이터를 손쉽게 다룰 수 있습니다.