import decimal import json from typing import Any import numpy as np class JSONEncoder(json.JSONEncoder): def default(self, obj: Any) -> Any: if isinstance(obj, np.integer): return int(obj) elif isinstance(obj, np.floating): return float(obj) elif isinstance(obj, np.ndarray): return obj.tolist() elif isinstance(obj, decimal.Decimal): if obj % 1 != 0: return float(obj) else: return int(obj) else: return super().default(obj)