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つあります。
toJSON()
メソッド- 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 is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn関連記事 - Python JSON
- Python で URL から JSON を取得する
- Python で JSON ファイルをきれいに出力する方法
- JSON Diff を使用した Python のマルチレベル JSON オブジェクトの比較
- Python で JSON をフラット化する
- Python を使用して JSON ファイルにデータを追加する