Перейти к содержимому
PD
n8n

JSON в n8n: разбор, преобразование и вложенность

Как устроены данные в n8n, как добираться до вложенных полей, как превращать массивы в элементы и обратно, и какие ошибки при работе с JSON встречаются чаще всего.

Все статьи гида n8n · 18

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

Структура данных

Ключевая вещь, которую стоит понять сразу: данные в n8n - это массив элементов, а не один объект.

Каждый элемент содержит поле с полезной нагрузкой и, если это файл, бинарную часть. Нода получает массив и выполняется для каждого элемента отдельно.

Отсюда растёт половина недоразумений:

  • Нода выполнилась пятьдесят раз, потому что на входе было пятьдесят элементов.
  • Отправилось пятьдесят одинаковых сообщений вместо одного.
  • Внешний API получил пятьдесят запросов подряд и ответил ограничением.

Практическое правило: всегда смотрите в историю выполнений, сколько элементов пришло в ноду. Это первое, что объясняет странное поведение.

Доступ к вложенным полям

Обращение идёт по пути от корня элемента через точечную нотацию. Массивы внутри - по индексу.

Три вещи, которые ломают выражения чаще всего:

Поле отсутствует. Обращение к вложенности внутри несуществующего поля уронит ноду. Для необязательных данных нужна проверка или безопасный доступ - внешние API регулярно не присылают поле вместо того, чтобы прислать его пустым.

Имя поля с необычными символами. Точки, дефисы и пробелы в именах требуют обращения через скобки, а не через точку.

Ссылка на ноду по имени. Выражения ссылаются на другие ноды по их названию, и переименование ноды ломает все выражения, которые на неё ссылались. Это самая обидная поломка, потому что она возникает при наведении порядка.

Полезный приём при отладке: выведите весь элемент целиком в отдельной ноде и посмотрите на реальную структуру. Быстрее, чем угадывать путь по документации API, которая может отставать от реальности.

Преобразования структуры

Четыре операции закрывают почти всё.

Разделение массива на элементы. Ответ API часто выглядит как один элемент с массивом внутри. Нода разделения по полю превращает массив в отдельные элементы, с которыми дальше работают ноды по одному.

Сборка элементов в один. Обратная операция. Нужна перед отправкой одного сообщения по многим записям или перед записью одним запросом.

Переименование и отбор полей. Приведение к нужной структуре перед записью в приёмник. Лучше делать явно отдельной нодой, чем размазывать по выражениям в целевой ноде: так видно, какая структура уходит.

Слияние двух потоков. Соединение данных из двух источников по ключу. Здесь важно понимать режим слияния: по позиции, по совпадению ключа или все со всеми - последний вариант при неаккуратном ключе даёт неожиданно много элементов.

Общая рекомендация: приводите данные к нужной структуре как можно раньше. Воркфлоу, где преобразование размазано по десяти выражениям в разных нодах, невозможно отлаживать.

Типовые ошибки

  • Ожидали один элемент, пришёл массив. Смотрите историю выполнений.
  • Обращение к полю, которого нет. Особенно после изменения внешнего API: воркфлоу работал год и вдруг перестал.
  • Число как строка. API часто отдаёт числа строками, и сравнение или сложение ведут себя не так, как ожидалось. Приводите тип явно.
  • Пустой массив против отсутствующего поля. Это разные случаи, и проверять их надо по-разному.
  • Кодировка и экранирование. JSON, вложенный строкой внутрь JSON, требует отдельного разбора и встречается чаще, чем хотелось бы.
  • Слишком большой объём. Тысячи элементов в истории выполнений замедляют интерфейс и раздувают базу - см. работу с API.

Когда нужна нода с кодом

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

Полезное ограничение: если половина воркфлоу - это код, значит, задача переросла визуальный редактор. Разбор этой развилки - в статье про аналоги.

Базовая работа с выражениями - данные и выражения. Обзор - гид по n8n.

Вопросы и ответы

Почему нода в n8n выполняется несколько раз?

Потому что данные в n8n - это массив элементов, и нода выполняется для каждого. Пятьдесят элементов на входе означают пятьдесят выполнений. Отсюда растёт половина недоразумений новичков, включая пятьдесят одинаковых писем вместо одного.

Как обратиться к вложенному полю JSON в n8n?

Через выражение с точечной нотацией по пути от корня элемента. Если поле может отсутствовать, обращение к вложенности внутри него уронит ноду, поэтому для необязательных данных нужна проверка на существование или безопасный доступ.

Как превратить массив внутри поля в отдельные элементы?

Специальной нодой разделения по полю: она берёт массив и создаёт из каждого его значения отдельный элемент. Обратная операция - агрегирование - собирает элементы обратно в один. Эти две ноды закрывают большинство преобразований структуры.

Ещё по теме

Сделаю под ключ

Соберу автоматизацию на n8n или кодом

Заявки, таблицы, CRM и Telegram связаны между собой, и никто больше не переносит данные руками.

от 300 $ · 3-7 дней

Похожий кейсАвтоматизация выдачи лицензий для BAS-скриптов на MakeСценарий в Make, который по одному сообщению в Telegram генерирует логин и пароль, выдаёт лицензию на срок, подключает FingerprintSwitcher Business и пишет строку в Google Sheets.

«Спасибо Павлу, поставленная задача выполнена. Всегда на связи, дал подробную инструкцию и руководство, буду обращаться, всем рекомендую.»

MarkBorisov · Kwork