Source code for aiida.common.json

###########################################################################
# Copyright (c), The AiiDA team. All rights reserved.                     #
# This file is part of the AiiDA code.                                    #
#                                                                         #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida-core #
# For further information on the license, see the LICENSE.txt file        #
# For further information please visit http://www.aiida.net               #
###########################################################################
"""Abstracts JSON usage to ensure compatibility with Python2 and Python3.

Use this module prefentially over standard json to ensure compatibility.

.. deprecated:: This module is deprecated in v2.0.0 and should no longer be used. Python 2 support has long since been
    dropped and for Python 3, one should simply use the ``json`` module of the standard library directly.

"""

import codecs
import json

from aiida.common.warnings import warn_deprecation

warn_deprecation(
    'This module has been deprecated and should no longer be used. Use the `json` standard library instead.', version=3
)


[docs] def dump(data, handle, **kwargs): """Serialize ``data`` as a JSON formatted stream to ``handle``. We use ``ensure_ascii=False`` to write unicode characters specifically as this improves the readability of the json and reduces the file size. """ try: if 'b' in handle.mode: handle = codecs.getwriter('utf-8')(handle) except AttributeError: pass return json.dump(data, handle, ensure_ascii=False, **kwargs)
[docs] def dumps(data, **kwargs): """Serialize ``data`` as a JSON formatted string. We use ``ensure_ascii=False`` to write unicode characters specifically as this improves the readability of the json and reduces the file size. """ return json.dumps(data, ensure_ascii=False, **kwargs)
[docs] def load(handle, **kwargs): """Deserialize ``handle`` text or binary file containing a JSON document to a Python object. :raises ValueError: if no valid JSON object could be decoded. """ if 'b' in handle.mode: handle = codecs.getreader('utf-8')(handle) try: return json.load(handle, **kwargs) except json.JSONDecodeError as exc: raise ValueError from exc
[docs] def loads(string, **kwargs): """Deserialize text or binary ``string`` containing a JSON document to a Python object. :raises ValueError: if no valid JSON object could be decoded. """ if isinstance(string, bytes): string = string.decode('utf-8') try: return json.loads(string, **kwargs) except json.JSONDecodeError as exc: raise ValueError from exc