JSON 직렬화에서 클래스 처리하기
파이썬에서 클래스를 JSON으로 변환하는 방법
JSON(JavaScript Object Notation)은 데이터를 효율적으로 저장하고 교환하기 위한 포맷입니다. 하지만 파이썬의 특정 클래스 객체는 JSON으로 직접 변환할 수 없습니다. 이 문제를 해결하기 위해 여러 방법이 존재하는데, 이 글에서는 그 중 가장 널리 사용되는 방법을 설명하겠습니다.
__dict__
속성 사용하기
파이썬에서 가장 간단한 방법은 객체의 __dict__
속성을 사용하는 것입니다. 이 속성은 객체의 모든 속성을 딕셔너리 형태로 제공합니다.
1
2
3
4
5
6
7
8
9
10
11
12
import json
class MyClass:
def __init__(self, name, age):
self.name = name
self.age = age
# 객체 생성
my_object = MyClass("Alice", 30)
# JSON으로 변환
json_string = json.dumps(my_object.__dict__)
json.dumps
의 default
인자 활용하기
json.dumps()
함수는 default
라는 인자를 제공합니다. 이 인자에 특별한 처리가 필요한 데이터 타입을 변환하는 함수를 지정할 수 있습니다.
1
2
3
4
def serialize_instance(obj):
return obj.__dict__
json_string = json.dumps(my_object, default=serialize_instance)
JSONEncoder
클래스 확장하기
json.JSONEncoder
클래스를 확장하여 default
메서드를 오버라이딩(덮어쓰기)하는 방법도 있습니다.
1
2
3
4
5
6
7
from json import JSONEncoder
class MyEncoder(JSONEncoder):
def default(self, o):
return o.__dict__
json_string = json.dumps(my_object, cls=MyEncoder)
주의사항
각 방법에는 장단점이 있습니다. __dict__
속성은 간단하지만, private 속성이나 메서드, 또는 _
로 시작하는 속성은 직렬화되지 않습니다. default
인자나 JSONEncoder
확장은 좀 더 유연하지만 코드가 복잡해질 수 있습니다.
JSON 직렬화는 데이터를 저장하거나 네트워크를 통해 전송할 때 자주 사용됩니다. 따라서 효율적인 방법을 선택하여 사용하는 것이 중요합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.