Write($key, json_encode($value)); } /** * Записывает значение в ключ JSON. * * @param string $key Ключ JSON. * @param mixed $value Записываемое значение. * * @return void * @throws JsonException Ключ не содержит вложений, хотя от него требуется обратное. */ public function Write (string $key, mixed $value): void { // Подготавливаем ключ $key = $this->PrepareKey($key); // Получаем массив ключей по вложенности $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(errorCode: JsonErrorCode::KeyIsNotArray, errorMessage: "The key does not contain attachments, although it is required to do the opposite / Ключ не содержит вложений, хотя от него требуется обратное!"); // - переходим ко вложенному массиву $current = &$current[$keys[$i]]; } // Создаем ключ (значение) $current[$keys[count($keys) - 1]] = $value; } /** * Записывает объект, реализующий интерфейс ISerializable, в ключ JSON. * * @param string $key Ключ JSON. * @param ISerializable $serializableValue Записываемый объект, реализующий интерфейс ISerializable. * * @return void * @throws JsonException Ключ не содержит вложений, хотя от него требуется обратное. */ public function WriteSerializable (string $key, ISerializable $serializableValue): void { // Сериализуем объект $serialized = $serializableValue->Serialize(); // Записываем в ключ $this->Write($key, $serialized); } /** * Записывает массив в ключ JSON. * * @param string $key Ключ JSON. * @param array $array Массив для записи. * * @return void * @throws JsonException Ключ не содержит вложений, хотя от него требуется обратное. */ public function WriteArray (string $key, array $array): void { // Сериализуем массив $serialized = json_encode($array); // Записываем в ключ $this->Write($key, $serialized); } }