Данные и выражения в n8n: элементы, $json и почему нода срабатывает много раз
Как устроены данные в n8n: массив элементов вместо объекта, выражения $json и $node, обращение к предыдущим нодам, работа с вложенным JSON, объединение и разбиение потоков и типичные ошибки с пустыми данными.
Все статьи гида n8n · 18
Большинство проблем в n8n - это не проблемы логики, а проблемы формы данных. Разобравшись с тем, как данные текут по воркфлоу, вы закроете вопросов больше, чем изучением любых конкретных нод.
Данные - это массив, а не объект
Ключевая модель: между нодами передаётся массив элементов. Каждый элемент - самостоятельный кусочек данных со своим JSON.
Отсюда следует главное: нода выполняется по разу на каждый элемент. Получила 50 элементов - сделает 50 HTTP-запросов, отправит 50 сообщений, создаст 50 записей.
Это не баг, а модель, но именно она даёт классические сюрпризы: «почему бот отправил 50 писем вместо одного» и «почему API забанил меня за частоту». Если нужен один запуск - сведите элементы в один заранее, а не надейтесь, что нода «поймёт».
Обратная ситуация тоже частая: API вернул один элемент, внутри которого массив из 50 объектов. Для n8n это по-прежнему один элемент - следующая нода отработает один раз. Чтобы работать с ними поштучно, массив нужно разложить в элементы.
Выражения
Везде, где поле принимает значение, можно вместо константы подставить выражение - обращение к данным.
$json- JSON текущего элемента. Поле берётся как$json.emailили$json["Имя поля"], если в имени пробелы или кириллица.- Обращение по имени ноды - данные конкретного предыдущего блока, а не непосредственно предыдущего.
- Служебные значения - текущее время, номер выполнения, данные воркфлоу.
Практический совет, который экономит часы: переименовывайте ноды осмысленно сразу. Выражение, ссылающееся на HTTP Request1, нечитаемо через месяц и ломается при перестановке блоков. Получить заказ - читается и переживает рефакторинг.
Вложенный JSON
Реальные API возвращают вложенность, и это второе место, где спотыкаются. Путь пишется через точку: $json.customer.address.city.
Проблема в том, что любое звено может отсутствовать. Если customer пришёл пустым, обращение к .address.city уронит выполнение. На данных, где часть полей необязательна, это гарантированный источник плавающих падений - воркфлоу работает неделю, а потом приходит запись без адреса.
Защищаться стоит там, где поле реально может не прийти: проверять наличие до обращения или подставлять значение по умолчанию. Тотально обвешивать проверками всё не нужно - только те поля, отсутствие которых вероятно.
Разветвление и объединение
Условия и ветвление делят поток: часть элементов идёт одним путём, часть - другим. Обычная ошибка - забыть, что вторая ветка тоже требует обработки; элементы, ушедшие в неё, не исчезают, они просто идут по другому маршруту.
Объединение потоков - операция, где чаще всего рождаются неожиданности. Соединить два набора данных можно по-разному: сцепить подряд, сопоставить по ключу, взять пересечение. Если после объединения элементов оказалось больше, чем вы ожидали, - почти всегда выбран не тот режим, а не «n8n продублировал».
Отладка: смотрите на данные, а не на схему
Главный инструмент - история выполнений. В ней видно, что пришло в каждую ноду и что из неё вышло. Диагностика почти всегда сводится к тому, чтобы найти первую ноду, где данные перестали быть тем, чем вы их считали.
Порядок, который работает:
- Откройте выполнение и идите слева направо, пока не найдёте первое расхождение с ожиданием.
- Смотрите не только значения, но и количество элементов - резкий рост или падение обычно и есть корень проблемы.
- Проверьте, не пустой ли вход. Нода, получившая ноль элементов, не выполнится вообще - и это выглядит как «шаг пропустился», хотя всё логично.
Последний пункт стоит отдельного внимания: пустой результат в n8n почти никогда не ошибка сам по себе. Он молча тормозит всю ветку ниже.
Типовые грабли
- Число пришло строкой. API часто отдаёт
"42", а сравнение с числом даёт неожиданный результат. - Пустая строка не то же самое, что отсутствие поля. Проверки на существование и на пустоту - разные проверки.
- Регистр имён полей.
Emailиemail- разные поля, и это классический источник «почему пусто». - Ноль элементов на входе. Ветка тихо не выполняется, никакой ошибки нет.
Если воркфлоу ведёт себя необъяснимо, начните с гипотезы «данные не той формы» - она подтверждается чаще всех остальных вместе взятых. Что делать, когда падение уже случилось, разобрано в статье про обработку ошибок.
Вопросы и ответы
Почему нода в n8n выполняется несколько раз?
Потому что данные в n8n - это массив элементов, и нода выполняется по одному разу на каждый элемент. Если предыдущая нода вернула 50 записей, следующая сделает 50 запросов. Это не ошибка, а модель работы: чтобы получить один запуск, элементы нужно предварительно свести в один элемент.
Как в n8n обратиться к данным из предыдущей ноды?
К данным текущего элемента - через $json, к результату конкретной ноды - обращением по её имени. Именно поэтому ноды стоит переименовывать осмысленно: выражение, ссылающееся на «HTTP Request1», ломается при первой же перестановке блоков и нечитаемо через месяц.
Ещё по теме
- n8n: полный практический гид по автоматизации воркфлоуГид
- Установка n8n в Docker: self-hosted на своём сервереКак поднять n8n на своём сервере через Docker: docker compose, том для данных, ключ шифрования, HTTPS и вебхуки за реверс-прокси, переход на PostgreSQL и что бэкапить, чтобы не потерять доступы.
- Триггеры и вебхуки в n8n: как запускается воркфлоуВиды триггеров в n8n и работа с вебхуками: чем тестовый URL отличается от боевого, почему вебхук не приходит, ответ вызывающей стороне, расписание и таймзоны, защита публичного эндпоинта.
- Обработка ошибок в n8n: ретраи, error workflow и надёжная автоматизацияКак сделать воркфлоу n8n устойчивым: настройки ошибок на уровне ноды, повторы и таймауты, отдельный error workflow для уведомлений, идемпотентность при повторной обработке и почему автоматизация ломается тихо.
Сделаю под ключ
Соберу автоматизацию на n8n или кодом
Заявки, таблицы, CRM и Telegram связаны между собой, и никто больше не переносит данные руками.
от 300 $ · 3-7 дней
«Спасибо Павлу, поставленная задача выполнена. Всегда на связи, дал подробную инструкцию и руководство, буду обращаться, всем рекомендую.»