[python] Marshmallow의 Nested 필드를 사용하여 중첩된 JSON 데이터 처리하기

Marshmallow는 Python용 직렬화 및 역직렬화 라이브러리로, 데이터 모델과 JSON 데이터 사이의 변환을 용이하게 해줍니다. 중첩된 JSON 데이터를 다루는 경우, Marshmallow의 Nested 필드를 사용하여 간편하게 처리할 수 있습니다.

Nested 필드란?

Marshmallow의 Nested 필드는 JSON 데이터 구조 내에서 다른 객체를 포함하는 필드입니다. Nested 필드를 사용하면 중첩된 객체 간의 관계를 표현할 수 있으며, 중첩된 필드의 데이터를 직렬화 및 역직렬화할 수 있습니다.

예제

아래 예제는 사용자 및 사용자의 프로필 정보를 담은 JSON 데이터를 처리하는 방법을 보여줍니다.

먼저, 다음의 데이터 모델을 정의합니다.

from marshmallow import Schema, fields

class ProfileSchema(Schema):
    name = fields.Str()
    age = fields.Int()

class UserSchema(Schema):
    id = fields.Int()
    username = fields.Str()
    profile = fields.Nested(ProfileSchema)

위의 코드에서 ProfileSchema는 프로필 정보를 나타내는 스키마이고, UserSchema는 사용자 정보를 나타내는 스키마입니다. UserSchemaprofile 필드는 ProfileSchema의 인스턴스를 포함하고 있으므로, 중첩된 필드로 정의됩니다.

다음은 JSON 데이터를 직렬화하고 역직렬화하는 예제 코드입니다.

# 직렬화
user_data = {
    "id": 1,
    "username": "john",
    "profile": {
        "name": "John Doe",
        "age": 30
    }
}

schema = UserSchema()
result = schema.dumps(user_data)
print(result)  # 결과: {"id": 1, "username": "john", "profile": {"name": "John Doe", "age": 30}}

# 역직렬화
json_data = '{"id": 1, "username": "john", "profile": {"name": "John Doe", "age": 30}}'

result = schema.loads(json_data)
print(result)  # 결과: {'id': 1, 'username': 'john', 'profile': {'name': 'John Doe', 'age': 30}}

위의 코드에서 dumps 함수는 데이터를 직렬화하고, loads 함수는 JSON 데이터를 역직렬화합니다. 결과를 출력하면, 원하는 형태의 JSON 데이터가 생성되는 것을 확인할 수 있습니다.

결론

Marshmallow의 Nested 필드를 사용하면 중첩된 JSON 데이터를 처리하기 간단하고 효율적으로 할 수 있습니다. 중첩된 객체 간의 관계를 표현하고, 데이터를 직렬화 및 역직렬화하는 작업을 쉽게 수행할 수 있습니다.

더 자세한 내용은 Marshmallow의 공식 문서를 참조하시기 바랍니다.