Source code for smt_optim.utils.json
import json
import warnings
import numpy as np
[docs]
def json_safe(obj):
try:
if obj is None or isinstance(obj, (bool, int, float, str)):
return obj
if isinstance(obj, (np.integer, np.floating)):
return obj.item()
if isinstance(obj, np.ndarray):
return obj.tolist()
if isinstance(obj, dict):
safe = {}
for k, v in obj.items():
try:
safe[str(k)] = json_safe(v)
except:
safe[str(k)] = None
return safe
if isinstance(obj, (list, tuple)):
out = []
for v in obj:
try:
out.append(json_safe(v))
except Exception:
out.append(None)
return out
json.dumps(obj)
return obj
except Exception as e:
try:
obj_repr = repr(obj)
except Exception:
obj_repr = "<unrepresentable object>"
warnings.warn(f"Failed to convert: {obj_repr}. Error message: {e}")
return None