\

PythonでJSONを扱う際、特定のオブジェクトタイプをシリアライズできないというエラー「object of type is not json serializable」が発生することがあります。この記事では、その原因と対処法について説明します。

原因

このエラーは、Pythonのjson.dump()またはjson.dumps()関数を使用して、シリアライズできないオブジェクトタイプ(例えば、独自のクラスやdatetimeオブジェクト)をJSONに変換しようとしたときに発生します。

import json
import datetime

# json.dumps可能
ok_object  = ['aaa', {'bbb': ('ccc', None, 1.0, 2)}]
print(json.dumps(ok_object))  # ["aaa", {"bbb": ["ccc", null, 1.0, 2]}]

# json.dumps不可能
ng_object  = {'datetime':  datetime.datetime.now()}
print(json.dumps(ng_object))  # TypeError: Object of type 'datetime' is not JSON serializable

上記のコードでは、datetimeオブジェクトを含む辞書をjson.dumps()に渡しています。その結果、「TypeError: Object of type ‘datetime’ is not JSON serializable」というエラーが発生します。

対処法

datetimeオブジェクトの場合

datetimeオブジェクトをシリアライズするには、オブジェクトを文字列に変換します。

import json
import datetime

# json.dumps可能
ok_object  = {'datetime':  datetime.datetime.now().isoformat()}  # datatime型をstr型に変換
print(json.dumps(ok_object))  # {"datetime": "2021-09-18T13:49:18.776939"}

独自クラスの場合

独自に定義したクラスのインスタンスをシリアライズするには、__dict__メソッドを使用してクラスのプロパティを辞書に変換します。

import json

class Sample():
    def __init__(self):
        self.x = 1
        self.y = 2

sample = Sample()

# json.dumps可能
print(json.dumps(sample.__dict__))  # {"x": 1, "y": 2}

以上、Pythonで「object of type is not json serializable」エラーに遭遇したときの対処法について説明しました。この情報が皆さんの問題解決に役立つことを願っています。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です