Исходный код EJIO.utils.serialization.implementations.json_serializer

## /utils/serialization/implementations/json_serializer.py

from json import JSONDecodeError, dumps, loads, dump, load
from os.path import exists
from typing import Any
from ..serializer import Serializer
from ..serializer_registry import register_serializer
from ..err import SerializationError

__all__ = [
    'JSONSerializer'
]


[документация] @register_serializer('json') class JSONSerializer(Serializer): """ Реализация интерфейса Serializer для формата JSON. """ __slots__ = ()
[документация] @staticmethod def serialize[T](data: dict[str, T], /, **kwargs: Any) -> str: """ Преобразовать словарь в JSON-строку. :param data: Сериализуемый словарь. :param kwargs: Ключевые параметры для сереализатора. :return: JSON-строка. :raises SerializationError: При ошибках сериализации. """ try: return dumps(data, **kwargs) except (TypeError, OverflowError) as e: raise SerializationError(f"Serialization to json failed") from e
[документация] @staticmethod def deserialize[T](data: str, /, **kwargs: Any) -> dict[str, T]: """ Преобразовать JSON-строку обратно в словарь. :param data: JSON-строка. :param kwargs: Ключевые параметры для сереализатора. :return: Словарь, полученный из строки. :raises SerializationError: При ошибках десериализации. """ try: return loads(data, **kwargs) except JSONDecodeError as e: raise SerializationError(f"Deserialization from json failed") from e
[документация] @staticmethod def save[T](data: dict[str, T], filename: str, /, **kwargs: Any) -> None: """ Сохранить словарь в JSON-файл. :param data: Сериализуемый словарь. :param filename: Путь к файлу для сохранения. :param kwargs: Ключевые параметры для сереализатора. :raises SerializationError: При ошибках сериализации. """ try: with open(filename, 'w') as f: dump(data, f, **kwargs) except (IOError, OSError) as e: raise SerializationError(f"Failed to serialize data to file") from e
[документация] @staticmethod def load[T](filename: str, /, **kwargs: Any) -> dict[str, T]: """ Загрузить словарь из JSON-файла. :param filename: Путь к файлу для загрузки. :param kwargs: Ключевые параметры для сереализатора. :return: Словарь, полученный из строки. :raises SerializationError: При ошибках десериализации. """ try: if not exists(filename): raise FileNotFoundError(f"File {filename} not found") with open(filename, 'r') as f: data = load(f, **kwargs) return data except (IOError, OSError, FileNotFoundError) as e: raise SerializationError(f"Failed to deserialize data from file") from e