20250628 1.1 Beta 2

This commit is contained in:
2025-06-28 23:22:37 +03:00
parent f5420ce2c0
commit 58b3b74d99
6 changed files with 301 additions and 63 deletions

View File

@@ -2,8 +2,10 @@
namespace goodboyalex\php_components_pack\classes;
use goodboyalex\php_components_pack\enums\JsonErrorCode;
use goodboyalex\php_components_pack\exceptions\JsonException;
use goodboyalex\php_components_pack\traits\JsonReWriter\JsonReWriterReadTrait;
use goodboyalex\php_components_pack\traits\JsonReWriter\JsonReWriterWriteTrait;
/**
* Класс для работы с JSON-файлами.
@@ -15,10 +17,37 @@ use goodboyalex\php_components_pack\traits\JsonReWriter\JsonReWriterReadTrait;
*/
final class JsonReWriter
{
/**
* @var string $JsonString Строка JSON.
*/
public string $JsonString {
get {
// Преобразую данные в JSON
$json = json_encode($this->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 Массив данных.
*/
public array $JsonData;
private array $JsonData;
/**
* Конструктор класса.
@@ -41,18 +70,12 @@ final class JsonReWriter
*
* @param string $fileName Имя файла.
*
* @return void
* @throws JsonException Если файл не может быть сохранен.
* @return bool Сохранены ли данные в файл: <code>true</code> - да, <code>false</code> - нет.
*/
public function SaveToFile (string $fileName): void
public function SaveToFile (string $fileName): bool
{
// Запись данных в файл
file_put_contents($fileName, json_encode($this->JsonData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
// Проверка на ошибки
if (json_last_error() !== JSON_ERROR_NONE)
// - если есть ошибки, выбрасываем исключение
throw new JsonException($fileName, json_last_error(), json_last_error_msg());
return file_put_contents($fileName, $this->JsonString) !== false;
}
/**
@@ -60,23 +83,28 @@ final class JsonReWriter
*
* @param string $fileName Имя файла.
*
* @return void
* @throws JsonException Если файл не существует или содержит ошибки.
* @return bool Загрузились ли данные из файла: <code>true</code> - да, <code>false</code> - нет.
*/
public function LoadFromFile (string $fileName): void
public function LoadFromFile (string $fileName): bool
{
// Проверка существования файла
if (!is_file($fileName))
// - нет? Выбрасываем исключение
throw new JsonException($fileName, -1, "File does not exist / Файл не существует");
// - если нет, возвращаем false
return false;
// Чтение содержимого файла и преобразование JSON в объект
$this->JsonData = json_decode(file_get_contents($fileName), true);
// Чтение содержимого файла
$result = file_get_contents($fileName);
// Проверка на ошибки
if ($this->JsonData === null && json_last_error() !== JSON_ERROR_NONE)
// - если есть ошибки, выбрасываем исключение
throw new JsonException($fileName, json_last_error(), json_last_error_msg());
if ($result === false)
// - если есть ошибки, возвращаем false
return false;
// Записываем результат
$this->JsonString = $result;
// Возвращаем true, если все хорошо
return true;
}
/**
@@ -132,32 +160,12 @@ final class JsonReWriter
*/
private function CreateKey (string $key, mixed $value): void
{
// Получаем массив ключей по вложенности
$keys = $this->ParseKey($key);
// Получаем текущий массив данных
$current = &$this->JsonData;
// Для каждого ключа до предпоследнего
for ($i = 0; $i < count($keys) - 1; $i++) {
// - проверяем наличие ключа в текущем массиве
if (!isset($current[$keys[$i]]))
// - нет? Создаем ключ (массив)
$current[$keys[$i]] = [];
// - проверяем, что ключ является массивом
if (!is_array($current[$keys[$i]]))
// - нет? Выбрасываем исключение
throw new JsonException(null, -1, "Key is not an array / Ключ не является массивом!");
// - переходим ко вложенному массиву
$current = &$current[$keys[$i]];
}
// Создаем ключ (значение)
$current[$keys[count($keys) - 1]] = $value;
}
// Подключаем методы чтения JSON
use JsonReWriterReadTrait;
// Подключаем методы записи JSON
use JsonReWriterWriteTrait;
}