Группа: JSON

Подгруппа: -

Последняя версия: 11 (Java)


Описание

Обновляет узлы в JSON-документе, найденные по пути JSONPath, новым значением. Поддерживает массовое обновление по фильтрам.

Применение

  1. Добавьте новые данные или значения в JSON-документ действием «Установить значение в JSON».
  2. Продолжите работу с обновлённым JSON с помощью действий группы «JSON» или других действий платформы.


Параметры и их настройки

СвойствоОписаниеТипПример заполненияОбязательность заполнения поля
Параметры



Исходный 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, отрицательным индексам и рекурсивному поиску. Если путь выбирает несколько элементов, действие обновляет все найденные элементы одним и тем же значением.

Версии

  • Нет меток