Skip to content

Orjson

Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy.

Select json or orjson driver code

# -*- coding: utf-8 -*-

import json
from typing import Any, Callable

JsonByteEncoder = Callable[[Any], bytes]
JsonByteDecoder = Callable[[bytes], Any]
JsonEncoder = Callable[[Any], str]
JsonDecoder = Callable[[str], Any]


def python_json_byte_encoder(data: Any) -> bytes:
    return json.dumps(data).encode("utf-8")


def python_json_byte_decoder(data: bytes) -> Any:
    return json.loads(data)


def python_json_encoder(data: Any) -> str:
    return json.dumps(data)


def python_json_decoder(data: str) -> Any:
    return json.loads(data)


_global_json_byte_encoder: JsonByteEncoder = python_json_byte_encoder
_global_json_byte_decoder: JsonByteDecoder = python_json_byte_decoder
_global_json_encoder: JsonEncoder = python_json_encoder
_global_json_decoder: JsonDecoder = python_json_decoder


def install_orjson_driver() -> bool:
    """
    Install orjson driver.

    .. warning::
        It should not be applied to be installed automatically.
        If you find a driver error, you should use the Python default settings.
    """

    try:
        import orjson

        global _global_json_byte_encoder
        global _global_json_byte_decoder
        global _global_json_encoder
        global _global_json_decoder

        def orjson_byte_encoder(data: Any) -> bytes:
            return orjson.dumps(data)

        def orjson_byte_decoder(data: bytes) -> Any:
            return orjson.loads(data)

        def orjson_encoder(data: Any) -> str:
            return str(orjson.dumps(data), "utf-8")

        def orjson_decoder(data: str) -> Any:
            return orjson.loads(data)

        _global_json_byte_encoder = orjson_byte_encoder
        _global_json_byte_decoder = orjson_byte_decoder
        _global_json_encoder = orjson_encoder
        _global_json_decoder = orjson_decoder

        return True
    except ImportError:
        return False


def global_json_byte_encoder(data: Any) -> bytes:
    return _global_json_byte_encoder(data)


def global_json_byte_decoder(data: bytes) -> Any:
    return _global_json_byte_decoder(data)


def global_json_encoder(data: Any) -> str:
    return _global_json_encoder(data)


def global_json_decoder(data: str) -> Any:
    return _global_json_decoder(data)

Python JSON Libraries

See also

Favorite site