Python 클래스 개체를 JSON으로 직렬화

Zeeshan Afridi 2023년6월21일
  1. Python의 직렬화
  2. Python 클래스 JSON을 직렬화 가능하게 만들기
Python 클래스 개체를 JSON으로 직렬화

이 자습서에서는 직렬화 프로세스에 대해 교육합니다. 또한 toJSON() 메서드를 사용하고 JSON을 래핑하여 해당 클래스에 덤프하여 JSON 클래스를 직렬화할 수 있는 방법을 보여줍니다.

Python의 직렬화

직렬화 프로세스에는 개체를 보존하고 나중에 검색할 수 있는 형식으로 변환하는 작업이 포함됩니다. 객체의 상태를 파일에 기록하는 것과 같은 것입니다.

모든 개발자는 원격으로 정교한 모든 프로젝트에 대해 어느 시점에서 직렬화를 수행해야 합니다. 많은 일반적인 프로그래밍 작업에서 Python 프로그래밍 언어의 단순성은 뛰어난 기능 중 하나입니다.

몇 줄의 코드로 파일 IO, 그래프 그리기 및 온라인 콘텐츠 액세스가 모두 간단해집니다. 마찬가지로 Python은 사용자 지정 클래스를 직렬화하려고 할 때를 제외하고는 직렬화를 간단하게 만듭니다.

아래에서 클래스 개체를 JSON 개체로 직렬화하는 방법을 알아보겠습니다.

Python 클래스 JSON을 직렬화 가능하게 만들기

Python의 내장 json 모듈은 직접적인 JSON 상대가 있는 Python 기본 유형만 처리할 수 있습니다.

명시적으로 JSON 인코더의 기본 기능인 json.dump()json.dumps()는 가장 기본적인 개체 유형 집합(예: 사전, 목록, 문자열, 숫자, 없음 등)을 직렬화하는 것으로 제한됩니다. .).

이 문제를 해결하려면 클래스 JSON을 직렬화할 수 있는 고유한 인코더를 만들어야 합니다.

다양한 방법으로 Python 클래스 JSON을 직렬화할 수 있습니다. 상황의 복잡성에 가장 적합한 옵션을 선택하십시오.

아래에 주어진 JSON 클래스를 직렬화 가능하게 만드는 두 가지 기본 방법이 있습니다.

  1. toJSON() 메서드
  2. JSON을 래핑하여 해당 클래스에 덤프

toJSON() 메서드를 사용하여 JSON 클래스를 직렬화 가능하게 만들기

JSON 직렬화 가능 클래스 대신 직렬 변환기 메서드를 구현할 수 있습니다. 예를 들어 이 메서드에서 Object 클래스에는 Object 정보의 사전을 반환하는 JSON 함수가 있을 수 있습니다.

모든 Object 속성은 기본 유형이므로 이 사전을 인코딩 함수로 보내 JSON 표기법을 얻을 수 있습니다. 마지막으로 객체를 구성하는 속성 값을 반환합니다.

import json


class Object:
    def toJSON(self):
        return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4)


me = Object()
me.name = "kelvin"
me.age = 20
me.dog = Object()
me.dog.name = "Brunno"
print(me.toJSON())

출력:

{
    "age": 20,
    "dog": {
        "name": "Brunno"
    },
    "name": "kelvin"
}

클래스에서 덤프하도록 JSON 래핑

또 다른 솔루션은 다음 코드와 같이 JsonSerializable 클래스를 하위 클래스로 분류하여 JSON 덤프를 래핑하는 FileItem 클래스를 만드는 것입니다.

예제 코드:

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"}
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 JSON

관련 문장 - Python Class