90 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| 
 | ||
| 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;
 | ||
| 
 | ||
| /**
 | ||
|  * Класс для работы с JSON-файлами.
 | ||
|  *
 | ||
|  * @author Александр Бабаев
 | ||
|  * @package php_components_pack
 | ||
|  * @version 1.0
 | ||
|  * @since 1.1.0
 | ||
|  */
 | ||
| final class JsonReWriter
 | ||
| {
 | ||
|     /**
 | ||
|      * @var string $JsonString Строка JSON.
 | ||
|      */
 | ||
|     public string $JsonString {
 | ||
|         get {
 | ||
|             // Проверка на пустоту
 | ||
|             if (count($this->JsonData) === 0)
 | ||
|                 // - если массив пуст, возвращаем пустой JSON
 | ||
|                 return '{}';
 | ||
| 
 | ||
|             // Преобразую данные в 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 Массив данных.
 | ||
|      */
 | ||
|     private array $JsonData;
 | ||
| 
 | ||
|     /**
 | ||
|      * Конструктор класса.
 | ||
|      */
 | ||
|     public function __construct ()
 | ||
|     {
 | ||
|         $this->JsonData = [];
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * Деструктор класса.
 | ||
|      */
 | ||
|     public function __destruct ()
 | ||
|     {
 | ||
|         unset($this->JsonData);
 | ||
|     }
 | ||
| 
 | ||
|     // Подключаем методы чтения JSON
 | ||
|     use JsonReWriterReadTrait;
 | ||
| 
 | ||
|     // Подключаем методы записи JSON
 | ||
|     use JsonReWriterWriteTrait;
 | ||
| 
 | ||
|     // Подключаем методы сохранения и загрузки JSON
 | ||
|     use JsonReWriterLoadSaveTrait;
 | ||
| 
 | ||
|     // Подключаем методы работы с ключами
 | ||
|     use JsonReWriterKeyTrait;
 | ||
| 
 | ||
|     // Подключаем методы удаления данных из JSON
 | ||
|     use JsonReWriterDeleteTrait;
 | ||
| } |