Source code for jdxi_editor.midi.sysex.parser.json_parser

"""

Sysex parser
# Example usage:
>>> json_data = [0xF0, 0x41, 0x10, 0x00, 0x00, 0x00, 0x0E, 0x7E, 0x7F, 0x06, 0x01, 0x19, 0x01, 0x00,
>>>               0xF7]  # Example SysEx data

>>> parser = JDXiSysExParser(json_data)
>>> parsed_data = parser.parse()
>>> log.message(f"Parsed Data: {parsed_data}")

"""

import json
from pathlib import Path
from typing import Any, Dict, Optional

from decologr import Decologr as log

from jdxi_editor.project import __package_name__


[docs] class JDXiJsonSysexParser: """JDXiJsonSysexParser""" def __init__(self, json_sysex_data: Optional[str] = None): """ :param json_sysex_data: Optional[str] JSON Sysex data """
[docs] self.sysex_data_json = json_sysex_data
[docs] self.log_folder = Path.home() / f".{__package_name__}" / "logs"
self.log_folder.mkdir(parents=True, exist_ok=True) # Safe even if it exists
[docs] def from_json(self, json_sysex_data: str) -> None: """ from json :param json_sysex_data: str :return: None """ self.sysex_data_json = json_sysex_data
[docs] def parse(self) -> Optional[Dict[str, Any]]: """ Parse the stored JSON string into a dictionary. :return: Dictionary representation of SysEx data, or None if parsing fails. """ if self.sysex_data_json is None: log.error("No SysEx JSON data provided.") return None try: sysex_dict: Dict[str, Any] = json.loads(self.sysex_data_json) return sysex_dict except json.JSONDecodeError as ex: log.error(f"Invalid JSON format: {ex}") return None
[docs] def parse_json(self, json_sysex_data: str) -> Optional[Dict[str, Any]]: """ parse json :param json_sysex_data: str :return: dict """ self.sysex_data_json = json_sysex_data return self.parse()