|
import json |
|
import numpy as np |
|
from typing import Dict |
|
|
|
|
|
class JSONEncoder(json.JSONEncoder): |
|
def default(self, obj): |
|
if isinstance(obj, np.integer): |
|
return int(obj) |
|
elif isinstance(obj, np.floating): |
|
return float(obj) |
|
elif isinstance(obj, np.ndarray): |
|
return obj.tolist() |
|
else: |
|
return super(JSONEncoder, self).default(obj) |
|
|
|
|
|
def is_jsonable(x, json_encoder=None): |
|
try: |
|
json.dumps(x, cls=json_encoder) |
|
return True |
|
except Exception: |
|
return False |
|
|
|
|
|
def filter_jsonable(data: Dict, json_encoder=None) -> Dict: |
|
return {k: v for k, v in data.items() if is_jsonable(k, json_encoder=json_encoder) and is_jsonable(v, json_encoder=json_encoder)} |