jsonapi.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. """Priority based json library imports.
  2. Always serializes to bytes instead of unicode for zeromq compatibility
  3. on Python 2 and 3.
  4. Use ``jsonapi.loads()`` and ``jsonapi.dumps()`` for guaranteed symmetry.
  5. Priority: ``simplejson`` > ``jsonlib2`` > stdlib ``json``
  6. ``jsonapi.loads/dumps`` provide kwarg-compatibility with stdlib json.
  7. ``jsonapi.jsonmod`` will be the module of the actual underlying implementation.
  8. """
  9. # Copyright (C) PyZMQ Developers
  10. # Distributed under the terms of the Modified BSD License.
  11. from zmq.utils.strtypes import bytes, unicode
  12. jsonmod = None
  13. priority = ['simplejson', 'jsonlib2', 'json']
  14. for mod in priority:
  15. try:
  16. jsonmod = __import__(mod)
  17. except ImportError:
  18. pass
  19. else:
  20. break
  21. def dumps(o, **kwargs):
  22. """Serialize object to JSON bytes (utf-8).
  23. See jsonapi.jsonmod.dumps for details on kwargs.
  24. """
  25. if 'separators' not in kwargs:
  26. kwargs['separators'] = (',', ':')
  27. s = jsonmod.dumps(o, **kwargs)
  28. if isinstance(s, unicode):
  29. s = s.encode('utf8')
  30. return s
  31. def loads(s, **kwargs):
  32. """Load object from JSON bytes (utf-8).
  33. See jsonapi.jsonmod.loads for details on kwargs.
  34. """
  35. if str is unicode and isinstance(s, bytes):
  36. s = s.decode('utf8')
  37. return jsonmod.loads(s, **kwargs)
  38. __all__ = ['jsonmod', 'dumps', 'loads']