JsonData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); // Проверка на ошибки if (json_last_error() !== JSON_ERROR_NONE) // - если есть ошибки, выбрасываем исключение throw new JsonException(null, JsonErrorCode::FromLastError(), json_last_error_msg()); // Возвращаем JSON return $json; } set { // Чтение содержимого файла и преобразование JSON в объект $this->JsonData = json_decode($value, true); // Проверка на ошибки if ($this->JsonData === null && json_last_error() !== JSON_ERROR_NONE) // - если есть ошибки, выбрасываем исключение throw new JsonException($value, JsonErrorCode::FromLastError(), json_last_error_msg()); } } /** * @var array $JsonData Массив данных. */ private array $JsonData; /** * Конструктор класса. */ public function __construct () { $this->JsonData = []; } /** * Деструктор класса. */ public function __destruct () { unset($this->JsonData); } /** * Сохраняем JSON в файл. * * @param string $fileName Имя файла. * * @return bool Сохранены ли данные в файл: true - да, false - нет. */ public function SaveToFile (string $fileName): bool { // Запись данных в файл return file_put_contents($fileName, $this->JsonString) !== false; } /** * Загрузка данных из JSON-файла. * * @param string $fileName Имя файла. * * @return bool Загрузились ли данные из файла: true - да, false - нет. */ public function LoadFromFile (string $fileName): bool { // Проверка существования файла if (!is_file($fileName)) // - если нет, возвращаем false return false; // Чтение содержимого файла $result = file_get_contents($fileName); // Проверка на ошибки if ($result === false) // - если есть ошибки, возвращаем false return false; // Записываем результат $this->JsonString = $result; // Возвращаем true, если все хорошо return true; } /** * Проверяем наличие ключа в JSON. * * @param string $key Ключ. * * @return bool true если ключ найден, false если нет. */ public function IsKeyExists (string $key): bool { // Получаем массив ключей по вложенности $keys = $this->ParseKey($key); // Получаем текущий массив данных $current = $this->JsonData; // Для каждого ключа foreach ($keys as $key) { // - проверяем наличие ключа в текущем массиве if (!array_key_exists($key, $current)) // - нет? Возвращаем false return false; // Переходим ко вложенному массиву $current = $current[$key]; } // Возвращаем true, если все ключи найдены return true; } /** * Получение ключей по вложенности. Т.е., ключи вида "key1/key2/key3" => ["key1", "key2", "key3"]. * * @param string $key Ключ. * * @return array Ключи по вложенности. */ private function ParseKey (string $key): array { return explode('/', $key); } /** * Создание ключа в JSON. * * @param string $key Ключ. * @param mixed $value Значение. * * @return void * @throws JsonException Если ключ не является массивом. */ private function CreateKey (string $key, mixed $value): void { } // Подключаем методы чтения JSON use JsonReWriterReadTrait; // Подключаем методы записи JSON use JsonReWriterWriteTrait; }