Использование функционала 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")} | Высказывания Века | 
| Логический оператор для фильтрации | Описание | Пример использования | Результат | 
| == |