この記事では、Pythonでよく遭遇するエラーの一つである「TypeError: Object of type ‘int64’ is not JSON serializable」について解説します。

エラーの原因

このエラーは、Pythonのjson.dump()またはjson.dumps()関数を使用してPythonオブジェクトをJSON形式の文字列に変換しようとしたときに発生します。具体的には、NumPyのint64型のオブジェクトをJSON形式に変換しようとしたときにこのエラーが発生します。

対処法

このエラーを解決するための主な方法は以下の通りです。

  1. NumPyのint64型をPythonのint型に変換する: int(my_numpy_int)のように、NumPyのint64型のオブジェクトをPythonのint型に変換します。

  2. カスタムエンコーダクラスを作成する: 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のintegerfloatingndarray型のオブジェクトをそれぞれPythonのintfloat、リストに変換します。

以上が「TypeError: Object of type ‘int64’ is not JSON serializable」エラーの対処法になります。この情報が皆さんのコーディングに役立つことを願っています。

投稿者 admin

コメントを残す

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