Python JSON 데이터 처리: load와 loads의 차이점과 활용법

Python에서 JSON 데이터를 다룰 때 가장 빈번하게 사용하는 내장 라이브러리는 json 모듈입니다. 이 모듈의 load()loads()는 JSON 포맷을 Python 객체(주로 딕셔너리나 리스트)로 변환하는 '역직렬화' 기능을 수행하지만, 데이터의 입력 출처에 따라 구분하여 사용해야 합니다.

기본 개념

  • json.load(): 파일 객체(File-like object)로부터 JSON 데이터를 읽어올 때 사용합니다.
  • json.loads(): 메모리에 있는 JSON 형식의 문자열(String)을 파싱할 때 사용합니다.

주요 데이터 타입 매핑

JSON 데이터를 파싱하면 Python의 표준 타입으로 다음과 같이 변환됩니다.

JSONPython
objectdict
arraylist
stringstr
number (int/float)int/float
true/falseTrue/False
nullNone

json.load() 활용: 파일 기반 데이터 처리

외부 파일에 저장된 JSON 데이터를 가져올 때는 open() 함수로 생성된 파일 객체를 직접 전달합니다.

import json

# 파일로부터 데이터 로드
with open("data.json", "r", encoding="utf-8") as f:
    config = json.load(f)

# 특정 키 접근
print(f"사용자 이름: {config.get('username')}")

json.loads() 활용: 문자열 기반 데이터 처리

API 응답이나 네트워크를 통해 받은 문자열 형태의 JSON을 다룰 때 유용합니다.

import json

raw_data = '{"id": 101, "status": "active", "roles": ["admin", "editor"]}'

# 문자열 파싱
user_info = json.loads(raw_data)

print(f"상태: {user_info['status']}")
print(f"첫 번째 역할: {user_info['roles'][0]}")

고급 활용: 커스텀 데이터 처리

데이터 파싱 시 특정 형식으로 값을 변환하거나, 데이터 순서를 보장해야 할 경우 옵션을 활용할 수 있습니다.

1. 순서 보장 (OrderedDict)

데이터의 입력 순서를 유지해야 한다면 object_pairs_hook을 사용하여 파싱 결과를 OrderedDict으로 받을 수 있습니다.

from collections import OrderedDict
import json

data = '{"apple": 1, "banana": 2, "cherry": 3}'
ordered_map = json.loads(data, object_pairs_hook=OrderedDict)
print(ordered_map)

2. 타입 기반 커스텀 파싱

parse_floatparse_int를 사용하면 수치 데이터가 파싱되는 즉시 가공할 수 있습니다.

import json

def custom_float_handler(value):
    return round(float(value), 2)

json_str = '{"price": 1234.5678}'
data = json.loads(json_str, parse_float=custom_float_handler)

print(data['price']) # 1234.57로 반올림 처리됨

태그: python JSON serialization deserialization data-processing

6월 17일 01:46에 게시됨