Parse JSON в n8n: Полное руководство по обработке и преобразованию данных
Parse JSON (разбор JSON) в n8n — это фундаментальная операция, необходимая для извлечения структурированных данных из строковых полей, API-ответов или файлов. n8n, будучи инструментом автоматизации workflow, часто получает данные в формате JSON, но в виде текстовой строки. Узел «Parse JSON» преобразует эту строку в нативный объект JavaScript, который последующие узлы могут понимать и обрабатывать. Без этого шага данные остаются непрозрачным текстом, и вы не можете получить доступ к вложенным свойствам, таким как data.user.email.
Принцип работы и место в workflow
Узел «Parse JSON» находится в категории «Data Transformation». Он принимает на входе одно или несколько полей, содержащих строки в формате JSON, и преобразует их в структурированные объекты. На выходе узел создает новые поля с разобранными данными, которые затем можно использовать в качестве входных данных для узлов, работающих с JSON (например, «Set», «IF», «Spreadsheet File», или при отправке в другие API).
Типичный сценарий использования: узел HTTP Request получает ответ от API в формате JSON. Несмотря на то, что ответ приходит как JSON, n8n иногда, особенно при сложных заголовках или настройках, может интерпретировать его как простую текстовую строку. В этом случае узел «Parse JSON» является обязательным промежуточным звеном для дальнейшей работы с данными.
Детальная настройка узла Parse JSON
Окно настройки узла содержит несколько ключевых полей:
- JSON String to Parse: Поле для указания пути к данным, содержащим JSON-строку. Используется точечная нотация, например,
{{ $json.body }}или{{ $json.data.rawResponse }}. - Destination Key: Имя нового поля, в которое будет помещен разобранный объект. По умолчанию —
json. Если поле с таким именем уже существует, оно будет перезаписано. - Options: Дополнительные параметры, включая обработку пустых значений и Unicode.
- Узел HTTP Request выполняет GET-запрос к
https://api.example.com/users/1. - Ответ приходит в теле (body) в виде строки:
{"id": 1, "name": "John Doe", "email": "john@example.com"}. - В узле Parse JSON в поле «JSON String to Parse» указываем
{{ $json.body }}. - Destination Key оставляем как
json. - На выходе узла данные становятся доступны как
{{ $json.id }},{{ $json.name }}и{{ $json.email }}. - В Parse JSON указываем источник:
{{ $json.metadata }}. - Destination Key можно задать как
parsedMetadata. - После разбора в последующих узлах можно обращаться к
{{ $json.parsedMetadata.session.duration }}(вернет 3600) и{{ $json.parsedMetadata.tags[0] }}(вернет «vip»). - С помощью выражения можно извлечь подстроку:
{{ $json.text.match(/{.*}/)[0] }}. - Это выражение найдет первую подстроку, заключенную в фигурные скобки, и передаст ее в Parse JSON для разбора.
- Invalid JSON string: Указывает на синтаксическую ошибку в исходной строке (пропущена кавычка, лишняя запятая). Для отладки используйте узел «Code» или «Function» для вывода проблемной строки в консоль, либо подключите узел «Error Trigger» для обработки сбоев.
- Path is not valid: Указанный путь к данным (например,
{{ $json.nonexistentField }}) не существует во входящем элементе. Проверьте правильность пути, используя встроенный браузер данных (Data Viewer) в предыдущем узле. - Узел «Function»: Позволяет использовать код
JSON.parse()вручную, что дает максимальную гибкость для сложной предобработки или обработки ошибок. - Узел «Code» (исполняет фрагменты кода на Python или JavaScript): Аналогично Function node, но с поддержкой других языков.
- Автоматический разбор: Многие узлы n8n (такие как HTTP Request, Webhook) автоматически парсят JSON, если в ответе установлен корректный Content-Type: application/json. В этом случае отдельный узел Parse JSON не требуется.
- Set: Для присвоения значений из разобранного JSON другим полям или для создания новых структур.
- IF (Condition): Для ветвления workflow на основе значений из JSON (например,
{{ $json.status }} = "active"). - Switch: Для создания множественных ветвей на основе значения поля.
- Spreadsheet File (Write): Для записи данных из разобранного JSON в CSV или Excel файл, используя точечную нотацию для указания полей.
- Item Lists / Aggregate: Для операций с массивами объектов, полученных после разбора.
- Наличие символов BOM в начале строки.
- Экранированные кавычки внутри строки JSON.
- Перенос строки в середине строки JSON без экранирования.
- Фактически полученные данные являются HTML-страницей с ошибкой, а не JSON.
Практические примеры использования
Пример 1: Базовый разбор ответа API
Workflow: HTTP Request -> Parse JSON -> Set (или любое дальнейшее использование).
Пример 2: Разбор вложенного JSON из поля базы данных
Предположим, узел PostgreSQL извлекает запись, где столбец metadata содержит JSON-строку: {"session": {"duration": 3600, "browser": "Chrome"}, "tags": ["vip", "beta"]}.
Пример 3: Обработка массива JSON-объектов
Если исходная строка содержит массив, например: [{"product": "A", "price": 100}, {"product": "B", "price": 200}], то после разбора в узле Parse JSON, выходные данные будут представлять собой массив. При подключении этого узла к узлу «Split Out», n8n создаст два отдельных элемента workflow, по одному для каждого объекта в массиве, что удобно для пакетной обработки.
Работа с динамическими JSON-строками и использование выражений
Часто содержимое JSON-строки неизвестно заранее или является динамическим. n8n позволяет использовать выражения JavaScript для предварительной обработки строки перед ее разбором. Это можно сделать в поле «JSON String to Parse», активировав режим выражения (кнопка «FX»).
Пример: необходимо извлечь JSON, вложенный в текстовое поле. Исходный текст: Report data: {"total": 500}. End of report.
Обработка ошибок и отладка
Основные ошибки при работе с узлом Parse JSON:
Рекомендуется всегда проверять выходные данные узла Parse JSON с помощью Data Viewer, чтобы убедиться, что структура объекта соответствует ожиданиям.
Альтернативы узлу Parse JSON
В некоторых случаях разбор JSON можно выполнить другими способами:
Сравнение методов обработки JSON в n8n
| Метод | Когда использовать | Преимущества | Недостатки |
|---|---|---|---|
| Узел Parse JSON | Стандартный разбор JSON-строк из полей, файлов, баз данных. | Простой UI, валидация, интеграция с браузером данных. | Ограниченная функциональность для нестандартных форматов. |
| Узел Function (JavaScript) | Сложная предобработка строки, обработка ошибок, динамическое построение JSON. | Полная программная гибкость, доступ ко всем функциям JS. | Требует знаний программирования, менее нагляден. |
| Автоматический парсинг узлов (HTTP Request) | При получении данных напрямую от API с правильным заголовком. | Не требует дополнительных узлов, данные сразу доступны. | Не работает, если ответ приходит как plain text или внутри другого поля. |
Интеграция Parse JSON с другими узлами n8n
Успешный разбор JSON открывает возможности для использования большинства мощных узлов n8n:
Ответы на часто задаваемые вопросы (FAQ)
В чем разница между данными в виде строки и разобранным JSON в n8n?
JSON-строка — это простой текст, который выглядит как {"key": "value"}. В Data Viewer он отображается в кавычках. Разобранный JSON — это структурированный объект, с которым n8n может работать нативно: в Data Viewer он отображается как раскрывающееся дерево, а к его значениям можно обращаться через точку: {{ $json.key }}.
Почему узел HTTP Request иногда автоматически парсит JSON, а иногда нет?
Это зависит от заголовка Content-Type в ответе сервера. Если сервер возвращает application/json, n8n выполнит автоматический парсинг. Если сервер возвращает text/plain или другой тип, даже если содержимое является валидным JSON, n8n будет рассматривать тело ответа как обычную текстовую строку, и для ее разбора потребуется узел Parse JSON.
Как разобрать JSON, который хранится в файле?
Используйте узел «Read Binary File» для загрузки файла. Его выходные данные содержат поле binary.data. Для преобразования бинарных данных в строку используйте узел «Convert to File», указав формат «text». Затем подключите узел Parse JSON к результату, указав в качестве источника {{ $json.data }}.
Можно ли использовать Parse JSON для разбора невалидного JSON?
Нет, узел Parse JSON требует строго валидного JSON. Для обработки нестрогих форматов (например, JSON с комментариями, trailing commas) необходимо сначала очистить строку с помощью узла «Function», используя регулярные выражения или кастомную логику, и только затем передавать результат в Parse JSON.
Как обрабатывать большие и сложные JSON-структуры?
Для навигации по большим структурам используйте встроенный браузер данных (Data Viewer) после узла Parse JSON. Для извлечения глубоко вложенных значений используйте точечную нотацию в выражениях: {{ $json.apiResponse.data.users[0].contact.email }}. Если структура слишком сложна, рассмотрите использование нескольких узлов Parse JSON для пошагового разбора или узла «Function» для написания специализированного кода извлечения.
Что делать, если Parse JSON возвращает ошибку «Unexpected token»?
Ошибка «Unexpected token» указывает на синтаксическую ошибку в строке. Частые причины:
Проверьте исходные данные, используя узел «Set» для вывода подозрительной строки в лог, или скопируйте их в онлайн-валидатор JSON.
Можно ли использовать Parse JSON для преобразования XML или CSV в JSON?
Нет, узел Parse JSON работает исключительно со строками формата JSON. Для преобразования XML используйте узел «XML» (из категории Transform). Для CSV используйте узел «Spreadsheet File» (Read) или «Convert to/from File».
Комментарии