Python에서 Dataclass를 JSON으로 변환

Zeeshan Afridi 2023년6월21일
Python에서 Dataclass를 JSON으로 변환

이 자습서에서는 각 JSON 루트 노드에 대해 dataclass를 생성하기 위해 Python에서 JSON이 어떻게 지원되는지 알아봅니다. 또한 Python에서 dataclass를 사전으로 구현하는 방법도 배웁니다.

파이썬에서 JSON으로 dataclass

JavaScript Object Notation 또는 JSON은 데이터가 프로그래밍 언어의 텍스트로 구성된 스크립트(실행 가능) 파일을 사용하여 저장 및 전송됨을 나타냅니다.

Python은 JSON 내장 모듈을 통해 JSON을 지원합니다. 따라서 이 기능을 활용하기 위해 JSON 패키지를 Python 스크립트로 가져옵니다.

JSON에서 사용되는 인용 문자열에는 키-값 매핑의 값이 포함됩니다. Python의 사전과 비슷합니다.

Python은 기본적으로 JSON 기능을 지원하며 JSON은 표준 라이브러리의 마샬링 및 피클 모듈 사용자와 유사한 API를 표시합니다.

반면 dataclass는 데이터를 저장하는 데 사용되는 데이터 전송 객체를 생성합니다. 이러한 객체는 동등한 비교를 위해, 때로는 표시를 위해 적절한 정의 방법이 필요합니다.

‘dataclass’는 데이터 전송 클래스에 대한 메서드 및 짧은 구문을 만드는 데 사용됩니다.

Python에서 dataclass를 사전으로 구현

Python 3.7 이상은 dataclass 데코레이터를 지원하는 유일한 버전입니다. 일반적으로 데이터 전송 개체라고 하는 개체를 생성하며, 개체의 유일한 기능은 데이터를 저장하는 것입니다.

문제는 이러한 개체에 올바른 기능을 제공하려면 동등성 비교, 표시 등을 위한 메서드를 만들어야 한다는 것입니다.

이러한 방법은 개발하는 데 노동 집약적이어야 하고 오류가 발생하기 쉽습니다. dataclass는 이러한 모든 메소드를 생성하여 데이터 전송 클래스에 짧은 구문을 제공합니다.

직렬화를 위해 dataclasses.asdict의 약간 변경된(그리고 다소 더 효과적인) 버전을 사용합니다.

JSON을 dataclass 인스턴스로 역직렬화할 때 dataclass 필드를 반복하고 각 주석 유형에 대한 파서를 생성하여 반복할 때 프로세스를 더 효과적으로 만들 수 있습니다.

Python의 모든 JSON root 노드에 대한 dataclass 생성

"users" 필드는 "id""name"이 있는 개체의 배열이므로 "Test""User"라는 두 개의 클래스를 구성해야 함을 알 수 있습니다.

예제 코드:

from dataclasses import dataclass
from typing import List


@dataclass
class User:
    id: 1
    name: "Kelvin"


@dataclass
class Test:
    id: 2
    userid: " Jack"


users: List[User]

각 JSON 특성은 형식이 안전한 Python 속성에 매핑되어야 합니다.

다음 코드는 각 JSON 노드 및 특성을 Python 클래스 및 속성에 매핑합니다. 이를 위해 사전을 Python 속성에 매핑하는 역할을 하는 Python 클래스에 정적 메서드를 생성합니다.

예제 코드:

from typing import List
from dataclasses import dataclass, asdict, field
from json import dumps


@dataclass
class Students:
    id: 1
    name: "stu1"

    @property
    def __dict__(self):
        return asdict(self)

    @property
    def json(self):
        return dumps(self.__dict__)


test_object_1 = Students(id=1, name="Kelvin")
print(test_object_1.json)

출력:

{"id": 1, "name": "Kelvin"}

데이터 전송 개체는 dataclasses에 의해 만들어지며 여기에 데이터를 저장하는 데 사용됩니다. 따라서 이러한 개체는 동등한 비교와 때때로 표시를 위해 올바른 메서드 정의가 필요합니다.

데이터 전송 클래스의 방법 및 구문은 dataclass를 사용하여 생성됩니다.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

관련 문장 - Python Dataclass