Как загрузить JSON в n8n: Полное руководство
Загрузка и обработка данных в формате JSON является одной из ключевых операций в n8n, платформе автоматизации рабочих процессов. JSON (JavaScript Object Notation) служит универсальным форматом для обмена данными между различными приложениями, API и сервисами. В n8n работа с JSON может осуществляться на нескольких уровнях: прямое использование JSON-данных в узлах, загрузка из файлов, парсинг строк и интеграция через HTTP-запросы. Данная статья детально рассматривает все методы, предоставляя пошаговые инструкции и лучшие практики.
Основные методы загрузки JSON в n8n
Существует несколько принципиально разных способов загрузки JSON-данных в рабочий процесс n8n. Выбор метода зависит от источника данных и требуемой логики обработки.
1. Использование узла «HTTP Request» для получения JSON из API
Это наиболее распространенный метод получения JSON-данных из внешних сервисов. Узел «HTTP Request» выполняет запрос к указанному URL, который возвращает JSON-ответ.
- Настройка узла: Добавьте узел «HTTP Request» на канвас. В настройках узла выберите метод запроса (обычно GET или POST). В поле «URL» укажите адрес API-эндпоинта.
- Обработка ответа: Убедитесь, что в разделе «Response» выбрана опция «JSON». Это гарантирует, что n8n автоматически распарсит ответ сервера в объект JSON, с которым могут работать последующие узлы. Данные будут доступны в формате, пригодном для использования в выражении.
- Пример: Запрос к `https://api.example.com/data` с методом GET вернет массив или объект JSON, который станет входными элементами для следующего узла.
- Шаг 1: Чтение файла. Используйте узел «Read Binary Files». В его настройках укажите путь к JSON-файлу. На этом этапе данные представляют собой бинарное содержимое файла.
- Шаг 2: Парсинг бинарных данных в JSON. Подключите к узлу «Read Binary Files» узел «Convert to JSON». В его настройках укажите, что исходные данные находятся в бинарном формате. Этот узел преобразует строковое содержимое файла в валидный объект или массив JSON.
- В узле «Code» (JavaScript/Node.js): Создайте объект JavaScript, который автоматически является JSON-совместимым.
// Пример в узле Code const jsonData = [ { "id": 1, "name": "Item 1" }, { "id": 2, "name": "Item 2" } ]; return jsonData; - В узле «Function»: Аналогично можно определить данные и вернуть их как выходные элементы.
- В выражении: В любом поле, поддерживающем выражения, используйте
{{JSON.parse($json.node.jsonString)}}. - В узле «Function»:
const jsonString = items[0].json.stringField; try { const jsonData = JSON.parse(jsonString); return [{json: {parsedData: jsonData}}]; } catch (error) { throw new Error('Ошибка парсинга JSON'); } - Базовый доступ:
{{$json.fieldName}}— доступ к полю корневого объекта. - Доступ к вложенным объектам:
{{$json.object.subObject.key}}. - Item Lists: Для агрегации, сортировки, разделения или ограничения количества элементов в массиве JSON.
- Set: Для ручного определения структуры выходного JSON, сопоставляя поля с помощью выражений.
- Code / Function: Для сложных преобразований с использованием JavaScript.
- Невалидный JSON: Используйте try-catch блок в узле «Function» при парсинге строк. Узел «HTTP Request» с опцией «JSON» автоматически выбросит ошибку при получении невалидного ответа.
- Отсутствующие поля: Используйте условные ветвления (узел «IF») или опциональный чейнинг в выражениях (
{{$json.field?.subField}}в JavaScript-режиме). - Ошибки сети и таймауты: Настройте параметры «Timeout» и «Retry On Fail» в узле «HTTP Request».
- Триггер: Узел «Schedule Trigger» для запуска workflow ежедневно.
- Загрузка данных: Узел «HTTP Request», настроенный на GET-запрос к публичному API (например, `https://api.publicapis.org/entries`). Ответ в формате JSON автоматически парсится.
- Преобразование: Узел «Set» выбирает только необходимые поля (например, `{{$json.API}}` и `{{$json.Description}}`) для формирования нового упрощенного объекта.
- Фильтрация: Узел «IF» проверяет условие (например, содержит ли поле Description ключевое слово).
- Сохранение: Узел «Google Sheets» записывает отфильтрованные и преобразованные данные в таблицу.
- Использовать потоковую передачу, если API поддерживает пагинацию (разбивку на страницы). Делайте последовательные запросы с параметрами `page` и `limit`.
- Обрабатывать данные частями в цикле, используя узел «Loop Over Items».
- Рассмотреть предварительную обработку файла на стороне источника для уменьшения объема.
- Подключите узел «No Operation, do nothing» после узла загрузки и выполните workflow. Во всплывающем окне выполнения узла вы сможете просмотреть полную структуру данных во вкладке «Output».
- Временно подключите узел «Code» и используйте `console.log(items)` для вывода данных в лог выполнения (вкладка «Execution Details»).
- JSONL: Прочтите файл как бинарный, преобразуйте в текст, разделите строки (`split(‘n’)` в узле «Function»), а затем распарсите каждую строку через `JSON.parse()`.
- GeoJSON: Это валидный JSON. Его можно загрузить любым стандартным методом. Для гео-операций потребуется дополнительная логика в узле «Code».
2. Загрузка JSON из файла с помощью узла «Read Binary Files»
Если JSON хранится локально в виде файла, используется комбинация узлов для чтения и парсинга.
3. Непосредственный ввод JSON в узел «Code» или «Function»
Для тестирования или использования статических данных JSON можно вставить его напрямую в код узла.
4. Парсинг JSON-строки из предыдущих узлов
Часто данные поступают в виде строки JSON (например, из поля базы данных или текстового сообщения). Для преобразования используется функция JSON.parse().
Детальная таблица методов загрузки JSON
| Метод | Узлы n8n | Источник данных | Ключевые настройки | Использование |
|---|---|---|---|---|
| Запрос к API | HTTP Request | Внешний URL (REST API, веб-сервис) | Метод запроса, URL, Authentication, Response Format = JSON | Динамическое получение данных из внешних систем |
| Чтение из файла | Read Binary Files -> Convert to JSON | Локальный или сетевой файл (.json) | Путь к файлу, исходный формат = binary | Загрузка конфигураций, статических справочников, дампов данных |
| Прямой ввод | Code, Function | Жестко заданные в коде данные | Синтаксис JavaScript/JSON | Тестирование, прототипирование, константные данные |
| Парсинг строки | Function, Expression | Текстовое поле из предыдущего узла (БД, CSV, текст) | Функция JSON.parse() | Обработка данных, полученных в текстовом формате |
Обработка и манипуляция загруженными JSON-данными
После успешной загрузки JSON становится частью элемента данных n8n. Доступ к полям осуществляется через выражения.
Использование выражений для доступа к данным
Итерация по массивам: Если JSON является массивом, каждый его элемент становится отдельным элементом в n8n. Для доступа к свойству внутри элемента массива в следующем узле используйте {{$json.propertyName}}.
Преобразование структуры JSON
Для изменения структуры загруженного JSON используются узлы:
Обработка ошибок при загрузке JSON
Критически важно обрабатывать потенциальные ошибки для надежности workflow.
Практический пример workflow: Загрузка и обработка JSON
Ответы на часто задаваемые вопросы (FAQ)
Как обработать очень большой JSON-файл в n8n?
n8n обрабатывает данные в оперативной памяти, поэтому для больших файлов (сотни мегабайт и более) рекомендуется:
Можно ли загрузить JSON из тела входящего вебхука?
Да. Используйте триггер «Webhook». Данные, отправленные в теле POST-запроса в формате `application/json`, будут автоматически разобраны и доступны в последующих узлах как `{{$json}}`.
Почему узел «HTTP Request» возвращает строку вместо объекта JSON?
Убедитесь, что в настройках узла, на вкладке «Response», для параметра «Response Format» установлено значение «JSON». Если стоит «String» или «Automatic», данные могут не парситься автоматически.
Как отладить структуру полученного JSON?
Используйте следующие методы:
Как динамически сформировать JSON для отправки в другом узле?
Используйте выражения в узлах, которые принимают JSON (например, «HTTP Request» для тела POST-запроса). В поле «Body Parameters» выберите режим «JSON» и используйте выражения для формирования объекта. Альтернативно, сформируйте объект в узле «Function» и верните его.
Поддерживает ли n8n форматы JSON Lines (.jsonl) или GeoJSON?
Нативно — нет, как отдельные форматы. Однако их можно обработать:
Заключение
Загрузка JSON в n8n — фундаментальный навык для создания эффективных интеграций и автоматизаций. Платформа предлагает гибкий набор инструментов: от простого получения данных из API через узел «HTTP Request» до сложного парсинга и преобразования с помощью узлов «Function» и «Code». Понимание методов доступа к данным через выражения, а также принципов обработки ошибок, позволяет создавать устойчивые и мощные рабочие процессы. Правильный выбор метода загрузки в зависимости от источника данных оптимизирует производительность и надежность автоматизации.
Комментарии