Перейти к основному содержимому

Использование функционала 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