Python クラス オブジェクトを JSON にシリアル化する

Zeeshan Afridi 2023年6月21日
  1. Python でのシリアル化
  2. Python クラス JSON をシリアライズ可能にする
Python クラス オブジェクトを JSON にシリアル化する

このチュートリアルでは、シリアライゼーション プロセスについて説明します。 また、toJSON() メソッドを使用して JSON クラスをシリアライズ可能にし、JSON をラップしてそのクラスにダンプする方法も示しています。

Python でのシリアル化

シリアル化プロセスには、オブジェクトを保存して後で取得できる形式に変換することが含まれます。 オブジェクトの状態をファイルに記録するなど。

すべての開発者は、リモートで高度なプロジェクトであっても、ある時点でシリアル化を行う必要があります。 多くの典型的なプログラミング作業における Python プログラミング言語の単純さは、その優れた機能の 1つです。

数行のコードで、ファイル IO、グラフの描画、オンライン コンテンツへのアクセスがすべて簡単になります。 同様に、カスタム クラスをシリアライズしようとする場合を除いて、Python はシリアライズを単純にします。

以下で、クラス オブジェクトを JSON オブジェクトにシリアル化する方法を学びましょう。

Python クラス JSON をシリアライズ可能にする

Python の組み込み json モジュールは、JSON の直接の対応物を持つ Python プリミティブ型のみを処理できます。

明確に言えば、JSON エンコーダーのデフォルトの機能である json.dump() および json.dumps() は、オブジェクト タイプの最も基本的なセット (辞書、リスト、文字列、数値、None など) のシリアル化に限定されています。 .)。

これを修正するには、クラスの JSON をシリアル化できるようにする一意のエンコーダーを作成する必要があります。

さまざまな方法で Python クラス JSON をシリアライズ可能にすることができます。 状況の複雑さに最も適したオプションを選択してください。

以下に示すように、JSON クラスをシリアライズ可能にする主な方法は 2つあります。

  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
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