Поиск публикаций
Работа с JSON
Глобальные функции JSON
Эти функции доступны напрямую без префикса json.. Они предоставляют базовые операции с JSON.
парситьJSON(строка)
Преобразует строку в формате JSON в объект WDSP (числа, строки, массивы, объекты). При невалидном JSON выбрасывает исключение.
₽объект = парситьJSON('{"имя": "Вася", "возраст": 30}');
вJSON(значение)
Преобразует любое значение WDSP в строку JSON. Поддерживаются числа, строки, логические, массивы, объекты, null.
₽строка = вJSON({"a": 1, "b": "текст"});
красивый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-типа: "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"). Возвращает найденное значение или ничто.
ничто₽цена = ₽модуль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 УСПЕШНО ПРОЙДЕНЫ");