json.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. # Copyright (c) Alibaba, Inc. and its affiliates.
  2. from .base import FormatHandler
  3. def set_default(obj):
  4. import numpy as np
  5. """Set default json values for non-serializable values.
  6. It helps convert ``set``, ``range`` and ``np.ndarray`` data types to list.
  7. It also converts ``np.generic`` (including ``np.int32``, ``np.float32``,
  8. etc.) into plain numbers of plain python built-in types.
  9. """
  10. if isinstance(obj, (set, range)):
  11. return list(obj)
  12. elif isinstance(obj, np.ndarray):
  13. return obj.tolist()
  14. elif isinstance(obj, np.generic):
  15. return obj.item()
  16. raise TypeError(f'{type(obj)} is unsupported for json dump')
  17. class JsonHandler(FormatHandler):
  18. """Use jsonplus, serialization of Python types to JSON that "just works"."""
  19. def load(self, file):
  20. from . import jsonplus
  21. return jsonplus.loads(file.read())
  22. def dump(self, obj, file, **kwargs):
  23. from . import jsonplus
  24. file.write(self.dumps(obj, **kwargs))
  25. def dumps(self, obj, **kwargs):
  26. from . import jsonplus
  27. return jsonplus.dumps(obj, **kwargs)