Поиск публикаций
Муниципальные услуги

Получите услугу онлайн

Перейти

Работа с JSON

 Глобальные функции JSON

Эти функции доступны напрямую без префикса json.. Они предоставляют базовые операции с JSON.

парситьJSON(строка)

Преобразует строку в формате JSON в объект WDSP (числа, строки, массивы, объекты). При невалидном JSON выбрасывает исключение.

ПараметрТипОписание
строкастрокаJSON-текст для разбора
Возвращает: объект (число, строка, массив, объект и т.д.)
Пример:
₽объект = парситьJSON('{"имя": "Вася", "возраст": 30}');

вJSON(значение)

Преобразует любое значение WDSP в строку JSON. Поддерживаются числа, строки, логические, массивы, объекты, null.

ПараметрТипОписание
значениелюбойДанные для сериализации
Возвращает: строка JSON
Пример:
₽строка = вJSON({"a": 1, "b": "текст"});

красивыйJSON(значение)

Возвращает отформатированную JSON-строку с отступами и переносами строк для удобочитаемости.

ПараметрТипОписание
значениелюбойДанные для сериализации
Возвращает: строка с форматированным JSON
Пример:
₽красивый = красивыйJSON({"a": 1, "b": 2});

проверитьJSON(строка)

Проверяет, является ли строка валидным JSON-текстом. Возвращает логическое значение.

ПараметрТипОписание
строкастрокаJSON-текст для проверки
Возвращает: логическое значение
Пример:
если (проверитьJSON(₽текст)) { вывести("JSON корректен"); }

 Методы объекта json

Объект json предоставляет дополнительные функции для работы с JSON-данными. Используйте json.имяМетода(...).

json.разобрать(строка)

Аналог глобальной функции парситьJSON.

Возвращает: объект

json.вСтроку(значение)

Аналог вJSON.

Возвращает: строка JSON

json.красиво(значение)

Аналог красивыйJSON.

Возвращает: форматированная строка

json.валидный(строка)

Аналог проверитьJSON.

Возвращает: логическое значение

json.тип(значение)

Возвращает строку с именем JSON-типа: "null", "boolean", "number", "string", "array", "object".

ПараметрТипОписание
значениелюбойПеременная для определения типа
Возвращает: строка (имя типа)
Пример:
₽тип = ₽модульJSON.тип(истина);  // "boolean"

json.клонировать(значение)

Создаёт глубокую копию объекта или массива (рекурсивно копирует все вложенные структуры).

ПараметрТипОписание
значениеобъект / массивКопируемые данные
Возвращает: полная копия
Пример:
₽копия = ₽модульJSON.клонировать(₽оригинал);

json.объединить(цель, источник)

Объединяет два объекта: поля из источник добавляются или перезаписывают поля в цель. Возвращает новый объект.

ПараметрТипОписание
цельобъектБазовый объект
источникобъектОбъект с данными для слияния
Возвращает: новый объект (результат слияния)
Пример:
₽слияние = ₽модульJSON.объединить({a: 1, b: 2}, {b: 3, c: 4});

json.разность(левый, правый)

Возвращает объект, содержащий только те поля из левый, которых нет в правый, или значения которых отличаются. Полезно для сравнения.

Возвращает: объект с отличиями
Пример:
₽разница = ₽модульJSON.разность({a: 1, b: 2}, {b: 3, c: 4});

json.равны(первый, второй)

Сравнивает два значения на глубокое равенство (рекурсивно). Возвращает логическое значение.

Возвращает: истина или ложь
Пример:
если (₽модульJSON.равны(₽a, ₽b)) { вывести("объекты идентичны"); }

json.найти(объект, путь)

Ищет значение по JSONPath-выражению (например, "$.store.book[0].title"). Возвращает найденное значение или ничто.

ПараметрТипОписание
объектобъект / массивДанные для поиска
путьстрокаJSONPath-выражение (начинается с $)
Возвращает: найденное значение или ничто
Пример:
₽цена = ₽модульJSON.найти(₽данные, "$.store.book[0].price");

json.фильтр(массив, предикат)

Применяет функцию-предикат к каждому элементу массива и возвращает новый массив, содержащий только те элементы, для которых предикат вернул истина.

ПараметрТипОписание
массивмассивИсходный массив
предикатфункцияПринимает элемент, возвращает логическое значение
Возвращает: новый массив (отфильтрованный)
Пример:
₽чётные = ₽модульJSON.фильтр(₽массив, функция(₽x) { возврат ₽x % 2 == 0; });

json.преобразовать(массив, преобразователь)

Применяет функцию преобразования к каждому элементу массива и возвращает новый массив с результатами.

ПараметрТипОписание
массивмассивИсходный массив
преобразовательфункцияПринимает элемент, возвращает новое значение
Возвращает: новый массив (преобразованный)
Пример:
₽удвоенные = ₽модульJSON.преобразовать(₽массив, функция(₽x) { возврат ₽x * 2; });

json.пути(объект)

Возвращает массив строк, содержащих все JSONPath-пути до каждого конечного значения в объекте или массиве. Полезно для обхода.

ПараметрТипОписание
объектобъект / массивДанные для обхода
Возвращает: массив строк (пути)
Пример:
₽пути = ₽модульJSON.пути(₽данные);

json.построить(шаблон, значения)

Заменяет плейсхолдеры вида {{ключ}} в строковых значениях объекта шаблон на соответствующие значения из объекта значения. Возвращает новый объект с подставленными значениями.

ПараметрТипОписание
шаблонобъектОбъект с плейсхолдерами в строковых полях
значенияобъектЗначения для подстановки
Возвращает: новый объект с заполненными полями
Пример:
₽шаблон = { "имя": "{{имя}}", "возраст": "{{возраст}}" };
₽данные = { "имя": "Петр", "возраст": 25 };
₽результат = ₽модульJSON.построить(₽шаблон, ₽данные);

 Крайние случаи

  • Пустая строка: парситьJSON("") или json.разобрать("") выбрасывает исключение.
  • Примитивные типы: вJSON(ничто)"null", вJSON(истина)"true", вJSON(123)"123", вJSON("abc")"abc" (в кавычках).
  • Глубокое клонирование: json.клонировать создаёт полностью независимую копию (изменение копии не влияет на оригинал).
  • Слияние объектов: поля из источника перезаписывают поля цели при совпадении ключей.
  • Поиск по пути: если путь не найден, возвращается ничто (не выбрасывается исключение).
  • Фильтр/преобразование: возвращают новый массив, исходный не изменяется.

 Полный тестовый скрипт

Ниже приведён полный скрипт, демонстрирующий все функции модуля «json».

// ============================================================
// ТЕСТ МОДУЛЯ JSON (полностью исправленный, русские переменные)
// ============================================================

функция проверить(₽условие, ₽сообщение) {
    если (!₽условие) {
        вывести("ОШИБКА: " + ₽сообщение);
        бросить ₽сообщение;
    } иначе {
        вывести("OK: " + ₽сообщение);
    }
}

функция содержит(₽строка, ₽подстрока) {
    возврат позиция(₽строка, ₽подстрока) >= 0;
}

// ==================== 1. Глобальные функции JSON ====================
вывести("\n=== 1. Глобальные функции JSON ===");

₽строкаJSON = '{"имя": "Вася", "возраст": 30, "навыки": ["C++", "WDSP"]}';
₽объект = парситьJSON(₽строкаJSON);
проверить(тип(₽объект) == "объект", "парситьJSON вернул объект");
проверить(₽объект.имя == "Вася", "поле 'имя'");
проверить(₽объект.возраст == 30, "поле 'возраст'");
проверить(₽объект.навыки[0] == "C++", "массив навыков");

₽результатСтрока = вJSON(₽объект);
проверить(содержит(₽результатСтрока, '"имя":"Вася"'), "вJSON сериализует объект");

₽красивый = красивыйJSON(₽объект);
проверить(содержит(₽красивый, "\n"), "красивыйJSON добавляет переносы строк");
проверить(содержит(₽красивый, "  "), "красивыйJSON добавляет отступы");

проверить(проверитьJSON('{"a":1}') == истина, "валидный JSON -> истина");
проверить(проверитьJSON('{a:1}') == ложь, "невалидный JSON -> ложь");

// ==================== 2. Методы объекта json ====================
вывести("\n=== 2. Методы объекта json ===");
₽модульJSON = json;

// ... остальные тесты смотрите в полной версии ...

вывести("\nВСЕ ТЕСТЫ МОДУЛЯ JSON УСПЕШНО ПРОЙДЕНЫ");