20250628 1.1 Beta 2
This commit is contained in:
@@ -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;
|
||||
}
|
Reference in New Issue
Block a user