Использование функционала JSONPath
Платформа Altcraft поддерживает функционал языка запросов JSONPath при работе с JSON-контентом. Синтаксис JSONPath позволяет быстро и просто выбирать объекты внутри кода и использовать их в шаблонах сообщений. Его можно использовать при работе с API-контентом и с внешним JSON-контентом.
API-контент позволяет менять содержание триггерного сообщения при каждой отправке. Необходимую переменную можно указать в триггерном API-запросе. Подробнее о том, как запускать триггерные кампании и как работать с API-контентом в сообщениях, можно узнать здесь.
Для подключения внешнего JSON, перейдите в раздел "Опции" во время создания или редактирования шаблона и укажите ссылку на источник динамического JSON-контента. Платформа самостоятельно определит поля внешнего JSON-файла. Более подробную информацию об использовании JSON при работе с шаблонами сообщений вы можете найти здесь.
Аргументы функции
Переменная JSONPath на платформе Altcraft указывается в следующем виде:
{jsonpath(json.<корневой_объект> "<путь_к_объекту>" "<формат вывода>")}
Аргумент | Описание |
---|---|
Корневой объект | Обращение к JSON-объекту, в котором находится нужный параметр или объект |
Путь к объекту | Путь к искомому объекту; может состоять из разделённых точками сегментов, логических операторов, фильтров или функций |
Формат вывода | Конечная переменная может быть представлена в двух вариантах: item (объект) или array (массив).Item выведет первый найденный по запросу результат, а если результата нет, то вернёт пустую строку. Array возвращает массив всех найденных результатов. Этот режим всегда выводит результат в виде массива, даже если результат один или отсутствует. |
Примеры использования
Рассмотрим примеры использ ования JSONPath. Предположим, что мы имеем JSON-файл со следующим содержанием:
{
"store": {
"book": [
{
"category": "справочная литература",
"author": "Найджел Риз",
"title": "Высказывания Века",
"price": 8.95,
"images": ["AbeLincoln.png","Churchill.jpg","Thatcher.png"]
},
{
"category": "художественная литература",
"author": "Ивлин Во",
"title": "Меч почёта",
"price": 12.99,
"images": ["MenAtArms.png","Gentlemen.jpg","Officers.png"]
},
{
"category": "художественная литература",
"author": "Герман Мелвилл",
"title": "Моби Дик",
"isbn": "0-553-21311-3",
"price": 8.99,
"images": ["Ahab.png","Ishmael.jpg","whale.png"]
},
{
"category": "художественная литература",
"author": "Дж.Р.Р. Толкин",
"title": "Властелин Колец",
"isbn": "0-395-19395-8",
"price": 22.99
}
]
}
}
Благодаря функционалу JSONPath небольшое выражение может вернуть массив, содержащий всех авторов книг:
{jsonpath(json.store "$.book[*].author" "array")}
Другая функция вернёт один объект — автора первой книги:
{jsonpath(json.store "$.book[*].author" "item")}
Можно построить выраженее посложнее, например, для того, чтобы узнать название книги, цена которой выше 10, мы составим следующий код:
{jsonpath(json.store "$.book[?(@.price > 10)].title" "item")}
Чтобы узнать среднее арифметическое значение цены всех книг, используем такую функцию:
{jsonpath(json.store "$.book[*].price.avg()" "item")}
Переменные JSONPath также могут работать в циклах:
{for $index $imgs = jsonpath(json.store "$.book[*].images" "array")}
<li>{$imgs}</li>
{else}
<p>Empty array!</p>
{end}
Полный функционал JSONPath в платформе Altcraft Marketing указан в таблице ниже:
Аргумент | Описание | Пример использования | Результат |
---|---|---|---|
$ | Корневой элемент | {jsonpath(json.store "$.book[0].title" "item")} | Высказывания Века |
@ | Текущий элемент | {jsonpath(json.store "$.book[?(@.price > 10)].title" "item")} | Меч почёта |
.. | Рекурсивный спуск | {jsonpath(json.store "$..title" "array")} | [Высказывания Века Меч почёта Моби Дик Властелин Колец] |
* | Соответствие всем объектам | {jsonPath(json.store "$.book[*].price" "array")} | [8.95 12.99 8.99 22.99] |
?() | Фильтр | {jsonpath(json.store "$.book[?(@.category == 'справочная литература')].title" "item")} | Высказывания Века |
Логический оператор для фильтрации | Описание | Пример использования | Результат |
== | Равно | {jsonpath(json.store "$.book[?(@.category == 'справочная литература')].title" "item")} | Высказывания Века |
!= | Не равно | {jsonpath(json.store "$.book[?(@.category != 'справоч ная литература')].title" "array")} | [Меч почёта Моби Дик Властелин Колец] |
< | Меньше | {jsonpath(json.store "$.book[?(@.price < 10)].title" "array")} | [Высказывания Века Моби Дик] |
> | Больше | {jsonpath(json.store "$.book[?(@.price > 10)].title" "array")} | [Меч почёта Властелин Колец] |
<= | Меньше или равно | {jsonpath(json.store "$.book[?(@.price >= 12.99)].title" "array")} | [Меч почёта Властелин Колец] |
>= | Больше или равно | {jsonpath(json.store "$.book[?(@.price <= 12.99)].title" "array")} | [Высказывания Века Меч почёта Моби Дик] |
Функция | Описание | Пример использования | Результат |
max | Максимальное значение в массиве | {jsonPath(json.store "$.book[*].price.max()" "item")} | 22.99 |
min | Минимальное значение в массиве | {jsonPath(json.store "$.book[*].price.min()" "item")} | 8.95 |
first | Первый элемент массива | {jsonPath(json.store "$.book[*].title.first()" "item")} | Высказывания Века |
last | Последний элемент массива | {jsonPath(json.store "$.book[*].title.last()" "item")} | Властелин Колец |
sum | Сумма чисел в массиве | {jsonPath(json.store "$.book[*].price.sum()" "item")} | 53.92 |
avg | Среднее значение из чисел в массиве | {jsonPath(json.store "$.book[*].price.avg()" "item")} | 13.48 |
length | Количество элементов в массиве | {jsonPath(json.store "$.book.length()" "item")} | 4 |