20250629 1.1 Stable

This commit is contained in:
2025-06-29 20:29:52 +03:00
parent 58b3b74d99
commit 52de613b0f
10 changed files with 1365 additions and 118 deletions

View File

@@ -4,6 +4,9 @@ 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\JsonReWriterDeleteTrait;
use goodboyalex\php_components_pack\traits\JsonReWriter\JsonReWriterKeyTrait;
use goodboyalex\php_components_pack\traits\JsonReWriter\JsonReWriterLoadSaveTrait;
use goodboyalex\php_components_pack\traits\JsonReWriter\JsonReWriterReadTrait;
use goodboyalex\php_components_pack\traits\JsonReWriter\JsonReWriterWriteTrait;
@@ -22,6 +25,11 @@ final class JsonReWriter
*/
public string $JsonString {
get {
// Проверка на пустоту
if (count($this->JsonData) === 0)
// - если массив пуст, возвращаем пустой JSON
return '{}';
// Преобразую данные в JSON
$json = json_encode($this->JsonData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
@@ -65,107 +73,18 @@ final class JsonReWriter
unset($this->JsonData);
}
/**
* Сохраняем JSON в файл.
*
* @param string $fileName Имя файла.
*
* @return bool Сохранены ли данные в файл: <code>true</code> - да, <code>false</code> - нет.
*/
public function SaveToFile (string $fileName): bool
{
// Запись данных в файл
return file_put_contents($fileName, $this->JsonString) !== false;
}
/**
* Загрузка данных из JSON-файла.
*
* @param string $fileName Имя файла.
*
* @return bool Загрузились ли данные из файла: <code>true</code> - да, <code>false</code> - нет.
*/
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;
}
/**
* Получение ключей по вложенности. Т.е., ключи вида <code>"key1/key2/key3" => ["key1", "key2", "key3"]</code>.
*
* @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;
// Подключаем методы сохранения и загрузки JSON
use JsonReWriterLoadSaveTrait;
// Подключаем методы работы с ключами
use JsonReWriterKeyTrait;
// Подключаем методы удаления данных из JSON
use JsonReWriterDeleteTrait;
}