diff --git a/requirements.py b/requirements.py index bac0d08fcc..2269c03695 100644 --- a/requirements.py +++ b/requirements.py @@ -61,7 +61,8 @@ 'tzlocal==2.1', #'pyOpenSSL==19.0.0', 'cryptography==37.0.4', - 'watchdog-gevent==0.1.1'] + 'watchdog-gevent==0.1.1', + 'orjson==3.10.1'] extras_require = {'crate': ['crate==0.27.1'], 'databases': ['mysql-connector-python==8.0.30', diff --git a/volttron/platform/jsonapi.py b/volttron/platform/jsonapi.py index 59e35eaa9f..7b30e8e687 100644 --- a/volttron/platform/jsonapi.py +++ b/volttron/platform/jsonapi.py @@ -36,15 +36,30 @@ # under Contract DE-AC05-76RL01830 # }}} -from json import dump, dumps, load, loads +from orjson import dumps as _dumps, loads as _loads __all__ = ('dump', 'dumpb', 'dumps', 'load', 'loadb', 'loads') def dumpb(data, **kwargs): - return dumps(data, **kwargs).encode('utf-8') + return _dumps(data, **kwargs) def loadb(s, **kwargs): - return loads(s.decode('utf-8'), **kwargs) + return _loads(s, **kwargs) + +def dumps(data, **kwargs): + return _dumps(data, **kwargs).decode('utf-8') + +def loads(s, **kwargs): + return _loads(s.encode('utf-8'), **kwargs) + +def dump(data, fp, **kwargs): + fp.write(dumps(data, **kwargs).decode('utf-8')) + +def load(fp, **kwargs): + if isinstance(fp, io.TextIOBase): + return _loads(fp.read().encode('utf-8'), **kwargs) + else: + return _loads(fp.read(), **kwargs)