この記事では、Pythonでよく遭遇するエラーの一つである「TypeError: Object of type ‘int64’ is not JSON serializable」について解説します。
エラーの原因
このエラーは、Pythonのjson.dump()
またはjson.dumps()
関数を使用してPythonオブジェクトをJSON形式の文字列に変換しようとしたときに発生します。具体的には、NumPyのint64
型のオブジェクトをJSON形式に変換しようとしたときにこのエラーが発生します。
対処法
このエラーを解決するための主な方法は以下の通りです。
-
NumPyの
int64
型をPythonのint
型に変換する:int(my_numpy_int)
のように、NumPyのint64
型のオブジェクトをPythonのint
型に変換します。 -
カスタムエンコーダクラスを作成する:
json.JSONEncoder
クラスを継承したカスタムクラスを作成し、その中でNumPyのデータ型をPythonの基本データ型に変換する方法を定義します。
以下に、カスタムエンコーダクラスを作成する方法の例を示します。
import json
import numpy as np
class NpEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
if isinstance(obj, np.floating):
return float(obj)
if isinstance(obj, np.ndarray):
return obj.tolist()
return super(NpEncoder, self).default(obj)
# Your codes ....
json.dumps(data, cls=NpEncoder)
このカスタムエンコーダクラスNpEncoder
は、NumPyのinteger
、floating
、ndarray
型のオブジェクトをそれぞれPythonのint
、float
、リストに変換します。
以上が「TypeError: Object of type ‘int64’ is not JSON serializable」エラーの対処法になります。この情報が皆さんのコーディングに役立つことを願っています。