포스트

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.dumpsdefault 인자 활용하기

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 라이센스를 따릅니다.