직렬화(Serialization)란 복잡한 데이터 타입의 객체를 딕셔너리, 리스트 같은 파이썬의 기본(native) 데이터 타입으로 변환하는 과정입니다. 이렇게 변환된 데이터는 이후 json.dumps()와 같은 메서드를 통해 손쉽게 JSON 형식의 문자열로 변환될 수 있습니다.
json.dumps()로 JSON 문자열 변환하기
파이썬에서 JSON 직렬화를 위해 가장 널리 사용되는 표준 라이브러리는 바로 json 모듈입니다. 그중에서도 json.dumps() 메서드는 파이썬 객체를 받아 JSON 형식의 문자열로 변환해 줍니다.
아래 예제는 간단한 딕셔너리를 JSON 문자열로 변환하는 과정을 보여줍니다.
예제 1: 딕셔너리 직렬화
import json
x = {
"name": "Archana",
"age": 30,
"city": "Hyderabad"
}
# json.dumps()를 사용하여 JSON 문자열로 변환
y = json.dumps(x)
print(y)출력 결과
{"name": "Archana", "age": 30, "city": "Hyderabad"}예제 2: 다양한 자료형 직렬화
json.dumps()는 딕셔너리뿐만 아니라 리스트 등 다른 기본 자료형도 문제없이 처리할 수 있습니다.
import json
Emp = {1:"Archana",
2:"Krishna",
3:"Vineeth",
4:"Ramesh"}
jsonString = json.dumps(Emp)
print(jsonString)
Empid = [71, 72, 73, 74]
jsonString = json.dumps(Empid)
print(jsonString)출력 결과
{"1": "Archana", "2": "Krishna", "3": "Vineeth", "4": "Ramesh"}
[71, 72, 73, 74]딕셔너리의 키가 정수형인 경우에도 JSON 특성상 문자열 키로 자동 변환되는 점에 유의하세요.
pickle 모듈을 활용한 직렬화
파이썬에는 JSON 외에도 객체 직렬화를 위한 pickle 모듈이 있습니다. pickle은 파이썬 객체 구조를 직렬화(피클링)하고 역직렬화(언피클링)하는 데 사용되며, 리스트나 딕셔너리뿐 아니라 클래스 인스턴스를 포함한 거의 모든 파이썬 객체를 파일로 저장할 수 있도록 해줍니다.
즉, 피클링(Pickling)이란 파이썬 객체를 문자 스트림(byte stream)으로 변환하는 과정을 의미하며, 객체를 파일에 쓰기 전에 먼저 직렬화하는 방식으로 동작합니다.
정리
- 직렬화는 복잡한 객체를 JSON으로 변환하기 쉬운 기본 데이터 타입으로 바꾸는 과정입니다.
json.dumps()를 사용하면 딕셔너리, 리스트 등의 파이썬 객체를 JSON 문자열로 변환할 수 있습니다.- 사용자 정의 클래스 객체를 JSON으로 직렬화하려면 먼저 객체를 딕셔너리로 변환하거나,
default매개변수 또는JSONEncoder를 상속한 커스텀 인코더를 활용해야 합니다. - 파이썬 고유의 객체 구조를 그대로 저장하고 싶다면
pickle모듈을 사용하는 것이 좋습니다.