blob: 230f8208b62eaf8d5bb20f90f028b1828ff8990e [file] [log] [blame]
import json
from typing import Any
import numpy as np
def json_convert(val: Any) -> Any:
import datetime as dt
if isinstance(val, (np.generic,)):
return val.item()
if isinstance(val, np.ndarray):
return [json_convert(v) for v in val.tolist()]
if isinstance(val, set):
return [json_convert(v) for v in val]
if isinstance(val, (dt.datetime, dt.date, dt.time)):
return val.isoformat()
if isinstance(val, (bytes, bytearray)):
return val.decode("utf-8", errors="replace")
if isinstance(val, complex):
return {"real": float(val.real), "imag": float(val.imag)}
if isinstance(val, dict):
return {k: json_convert(v) for k, v in val.items()}
if isinstance(val, (list, tuple)):
return [json_convert(v) for v in val]
try:
json.dumps(val)
return val
except Exception:
return str(val)