JSON-вычисление

Рабочий процесс: вычисления JSONCommunity Edition+

Введение

На основе разных движков JSON-вычисления узел вычисляет или преобразует сложные JSON-данные, полученные от вышестоящих узлов, для использования последующими узлами. Например, результаты узлов «Действие SQL» и «HTTP запрос» можно преобразовать через этот узел в нужные значения и форматы переменных для дальнейшего использования.

Создание узла

В интерфейсе настройки рабочего процесса нажмите кнопку плюса ("+") в процессе, чтобы добавить узел «Вычисление JSON»:

Создание узла

Примечание

Обычно узел «Вычисление JSON» создают после других узлов данных, чтобы разбирать их результаты.

Настройка узла

Движок разбора

Узел «Вычисление JSON» поддерживает разные синтаксисы через разные движки разбора. Выбор зависит от ваших предпочтений и возможностей каждого движка. Сейчас поддерживаются три движка разбора:

Выбор движка

Источник данных

Источник данных может быть результатом вышестоящего узла или объектом данных из контекста рабочего процесса. Обычно это объект данных без встроенной структуры, например результат узла «Действие SQL» или «HTTP запрос».

Источник данных

Примечание

Обычно объекты данных узлов, связанных с коллекциями, уже структурированы конфигурацией коллекции и, как правило, не требуют разбора узлом «Вычисление JSON».

Выражение разбора

Пользовательские выражения разбора на основе требований и выбранного движка разбора.

Выражение разбора

Примечание

Разные движки предоставляют разный синтаксис разбора. Подробности — в документации по ссылкам.

Начиная с v1.0.0-alpha.15, выражения поддерживают переменные. Перед выполнением конкретного движка переменные предварительно разбираются: заменяются строковыми значениями по правилам строкового шаблона и объединяются со статическими строками выражения, формируя итоговое выражение. Это особенно полезно, когда нужно динамически строить выражения, например для разбора JSON по динамическому ключу.

Маппинг свойств

Когда результат вычисления — объект (или массив объектов), можно дополнительно отобразить нужные свойства в дочерние переменные через сопоставление свойств для использования в следующих узлах.

Сопоставление свойств

Примечание

Если для результата в виде объекта (или массива объектов) не выполнять сопоставление свойств, весь объект (или массив объектов) сохранится в результате узла как одна переменная, и значения его свойств нельзя будет напрямую использовать как отдельные переменные.

Пример

Предположим, что данные для разбора приходят из предыдущего узла «Действие SQL», который запрашивает данные, и его результат — набор данных заказов:

[
  {
    "id": 1,
    "products": [
      {
        "id": 1,
        "title": "Product 1",
        "price": 100,
        "quantity": 1
      },
      {
        "id": 2,
        "title": "Product 2",
        "price": 120,
        "quantity": 2
      }
    ]
  },
  {
    "id": 2,
    "products": [
      {
        "id": 3,
        "title": "Product 3",
        "price": 130,
        "quantity": 1
      },
      {
        "id": 4,
        "title": "Product 4",
        "price": 140,
        "quantity": 2
      }
    ]
  }
]

Если нужно разобрать и вычислить общую стоимость двух заказов в данных, а затем собрать ее с соответствующим идентификатором заказа в объект для обновления общей стоимости заказа, конфигурация может быть такой:

Пример конфигурации разбора SQL

  1. Выбрать движок разбора JSONata;
  2. Выбрать результат узла «Действие SQL» как источник данных;
  3. Использовать JSONata-выражение $[0].{"id": id, "total": products.(price * quantity)} для разбора;
  4. Выбрать сопоставление свойств, чтобы отобразить id и total в дочерние переменные;

Итоговый результат разбора:

[
  {
    "id": 1,
    "total": 340
  },
  {
    "id": 2,
    "total": 410
  }
]

Затем пройти циклом по полученному массиву заказов и обновить общую стоимость заказов.

Обновление общей стоимости соответствующего заказа