Параметры и их настройки
| Свойство | Описание | Тип | Пример заполнения | Обязательность заполнения поля |
|---|---|---|---|---|
| Параметры | ||||
| Исходный JSON | Текст в формате JSON, в котором необходимо обновить данные. Должен быть валидным JSON-документом. | JSON | {"items":[{"price":50},{"price":150}]} | Да |
| JSONPath | Выражение JSONPath для указания узлов, которые необходимо обновить. | Строка | $.items[?(@.price == 50)] | Да |
| Значение | Новое значение для установки. Поддерживаются JSON, строка, число, логическое значение, словарь и коллекция. Строковые значения вставляются как JSON-строки без попытки парсинга в объект. | Объект | 99 | Нет |
| Результаты | ||||
| Результат | Изменённая JSON-строка после обновления указанных узлов. | JSON | {"items":[{"price":99},{"price":150}]} |
Особые условия использования
Путь в параметре «JSONPath» должен начинаться с символа $.
Действие устанавливает новое значение во все данные, найденные по указанному пути. Если путь выбирает несколько элементов через фильтр, срез, wildcard или рекурсивный поиск, все найденные элементы будут заменены одним и тем же значением.
Действие не создаёт промежуточные узлы. Если путь указывает на несуществующий ключ или индекс, действие завершается ошибкой «Элементы по пути не найдены».
Строковые значения вставляются как строки. Если нужно вставить объект или массив, передайте значение как JSON, словарь или коллекцию, а не как обычную строку.
В Java-версии поддерживается расширенный синтаксис JSONPath: индексы массивов, отрицательные индексы, срезы, wildcard, рекурсивный поиск и фильтры.
Для поиска вхождения в Java-версии можно использовать ключевое слово contains, например $.products[?(@.tags contains 'sale')].discount.
Операторы в фильтрах нужно отделять пробелами от значений. Используйте @.price == 50, а не @.price==50.
Если в выражении для элемента массива пропустить закрывающую скобку, например указать $.items[1, Java-версия воспринимает путь как обращение ко всему списку $.items. В действии установки это может привести к замене всего списка, выбранного таким выражением.
Ошибки
| № | Событие | Описание ошибки в логе |
|---|---|---|
| 1 | Параметр «Исходный JSON» содержит некорректный JSON. | Обрабатываемый JSON некорректен. |
| 2 | Параметр «JSONPath» не начинается с $ или содержит синтаксическую ошибку. | JSONPath содержит синтаксическую ошибку: <текст ошибки>. |
| 3 | По указанному пути не найдено ни одного значения для обновления. | Элементы по пути не найдены. |
| 4 | В фильтре JSONPath указано некорректное регулярное выражение. | Некорректное регулярное выражение в JSONPath: <текст ошибки>. |
| 5 | Значение невозможно преобразовать в JSON-формат. | Невозможно преобразовать параметр «Значение» в формат JSON: <текст ошибки>. |
| 6 | Возникла внутренняя ошибка обработки JSONPath. | Внутренняя ошибка обработки JSONPath: <текст ошибки>. |
Сценарии использования
| Сценарий | Описание | Параметр: значение | Результат |
|---|---|---|---|
| Успешное выполнение | Обновить поле по точному пути | Исходный JSON: {"user":{"name":"Alex","status":"old"}} JSONPath: $.user.status Значение: "active" | {"user":{"name":"Alex","status":"active"}} |
| Успешное выполнение | Обновить все элементы по фильтру | Исходный JSON: {"items":[{"price":50},{"price":150},{"price":50}]} JSONPath: $.items[?(@.price == 50)] Значение: 99 | {"items":[{"price":99},{"price":150},{"price":99}]} |
| Успешное выполнение | Обновить значение через contains | Исходный JSON: {"products":[{"tags":["sale"],"discount":0},{"tags":["new"],"discount":0}]} JSONPath: $.products[?(@.tags contains 'sale')].discount Значение: 10 | {"products":[{"tags":["sale"],"discount":10},{"tags":["new"],"discount":0}]} |
| Успешное выполнение | Вставить строку, похожую на JSON | Исходный JSON: {"data":""} JSONPath: $.data Значение: {"id":1} как строка | {"data":"{\"id\":1}"} |
| Неуспешное выполнение | Передан некорректный JSON | Исходный JSON: {"broken": json} JSONPath: $.broken Значение: 1 | Действие завершилось с ошибкой №1. |
| Неуспешное выполнение | JSONPath не начинается с $ | Исходный JSON: {"items":[1,2]} JSONPath: items[0] Значение: 99 | Действие завершилось с ошибкой №2. |
| Неуспешное выполнение | Данные для обновления не найдены | Исходный JSON: {"items":[{"price":50}]} JSONPath: $.items[?(@.price > 100)] Значение: 99 | Действие завершилось с ошибкой №3. |
| Неуспешное выполнение | Попытка создать промежуточный узел | Исходный JSON: {"user":{}} JSONPath: $.user.profile.name Значение: "Alex" | Действие завершилось с ошибкой №3. |
Изменения в версии
По сравнению с предыдущей Java-версией действие поддерживает полноценный JSONPath вместо ограниченного синтаксиса пути через /.
Теперь пользователь может устанавливать значения по фильтрам, срезам, wildcard, отрицательным индексам и рекурсивному поиску. Если путь выбирает несколько элементов, действие обновляет все найденные элементы одним и тем же значением.