PythonでJSONを扱う際に、bool_
型のデータをシリアライズしようとすると、「bool_ is not JSON serializable」というエラーが発生することがあります。この記事では、そのエラーの原因と対処法について説明します。
原因
このエラーは、bool_
型のデータをJSONに変換しようとしたときに発生します。bool_
型は、実際にはnumpy.bool_
であり、これをそのままJSONに書き込むことはできません。
対処法
方法1: bool()関数を使用する
bool_
型のデータを通常のPythonのbool
型に変換することで、このエラーを解決することができます。以下にその例を示します。
import numpy as np
import json
json.dumps({"X": bool(np.int32(5) > 5)})
方法2: カスタムJSONエンコーダを使用する
複数のbool_
キーがある場合や、ネストされた構造がある場合には、すべてのbool_
フィールドを変換するためにカスタムJSONエンコーダを使用することができます。以下にその例を示します。
import json
class CustomJSONizer(json.JSONEncoder):
def default(self, obj):
return super().encode(bool(obj)) if isinstance(obj, np.bool_) else super().default(obj)
# オブジェクト/辞書を変換する
json.dumps(d, cls=CustomJSONizer)
以上が、「bool_ is not JSON serializable」というエラーの解決方法です。これらの方法を試してみてください。