---
pkg: '@nocobase/plugin-workflow-json-query'
---


# Вычисление JSON

## Введение

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

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

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

![Создание узла](https://static-docs.nocobase.com/7de796517539ad9dfc88b7160f1d0dd7.png)

:::info{title=Подсказка}
Обычно узел «Вычисление JSON» создается под другими узлами данных для их обработки.
:::

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

### Движок для обработки

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

- [JMESPath](https://jmespath.org/)
- [JSONPath Plus](https://jsonpath-plus.github.io/JSONPath/docs/ts/)
- [JSONata](https://jsonata.org/)

![Выбор движка](https://static-docs.nocobase.com/29be3b92a62b7d20312d1673e749f2ec.png)

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

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

![Источник данных](https://static-docs.nocobase.com/f5a97e20693b3d30b3a994a576aa282d.png)

:::info{title=Подсказка}
Обычно объекты данных узлов, связанных с коллекциями, уже структурированы с помощью информации о конфигурации коллекции и, как правило, не требуют обработки узлом «Вычисление JSON».
:::

### Выражение для обработки

Пользовательские выражения для обработки, основанные на требованиях к парсингу и выбранном движке для обработки.

![Выражение для обработки](https://static-docs.nocobase.com/181abd162fd32c09b62f6aa1d1cb3ed4.png)

:::info{title=Подсказка}
Различные движки предоставляют разный синтаксис для обработки. Подробности можно найти в документации по ссылкам.
:::

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

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

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

![Сопоставление свойств](https://static-docs.nocobase.com/b876abe4ccf6b4709eb8748f21ef3527.png)

:::info{title=Подсказка}
Для результата, представляющего собой объект (или массив объектов), если сопоставление свойств не выполняется, весь объект (или массив объектов) будет сохранен как одна переменная в результате узла, и значения свойств объекта не смогут быть использованы напрямую как переменные.
:::

## Пример

Предположим, данные для обработки поступают от предыдущего SQL-узла, используемого для запроса данных, и его результатом является набор данных о заказах:

```json
[
  {
    "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
      }
    ]
  }
]
```

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

![Пример — Настройка обработки SQL](https://static-docs.nocobase.com/e62322a868b26ff98120bfcd6dcdb3bd.png)

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

Окончательный результат обработки выглядит так:

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

Затем пройдитесь по полученному массиву заказов, чтобы обновить общую стоимость каждого заказа.

![Обновление общей стоимости соответствующего заказа](https://static-docs.nocobase.com/b3329b0efe4471f5eed1f0673bef740e.png)