Трансформация данных
Преобразование и обработка данных в n8n
Ноды для трансформации
Заголовок раздела «Ноды для трансформации»| Нода | Назначение |
|---|---|
| Set | Создание/изменение полей |
| Code | Произвольная логика |
| Edit Fields | Переименование, удаление полей |
| Date & Time | Работа с датами |
| Crypto | Хеширование, шифрование |
| HTML | Парсинг HTML |
| JSON | Конвертация JSON |
Set Node
Заголовок раздела «Set Node»Универсальная нода для работы с данными.
| Режим | Описание |
|---|---|
| Manual Mapping | Ручное указание полей |
| JSON | Ввод JSON напрямую |
Manual Mapping
Заголовок раздела «Manual Mapping»Добавление полей:
| Параметр | Пример |
|---|---|
| Name | fullName |
| Value | {{ $json.firstName }} {{ $json.lastName }} |
| Опция | Описание |
|---|---|
| Keep Only Set | Оставить только новые поля |
| Include Other Input Fields | Сохранить существующие |
| Ignore Type Conversion Errors | Игнорировать ошибки типов |
Edit Fields Node
Заголовок раздела «Edit Fields Node»Переименование и удаление полей.
Операции
Заголовок раздела «Операции»oldFieldName → newFieldNameuser.name → userNameУдалить: password, secretKeydata.user.name → userNameCode Node
Заголовок раздела «Code Node»Полный контроль через JavaScript/Python.
JavaScript
Заголовок раздела «JavaScript»// Трансформация данныхconst items = $input.all();
return items.map(item => ({ json: { // Преобразование полей id: item.json.id, name: item.json.name.toUpperCase(), email: item.json.email.toLowerCase(),
// Вычисляемые поля createdAt: new Date().toISOString(), isActive: item.json.status === 'active',
// Вложенные объекты metadata: { source: 'n8n', processedAt: Date.now() } }}));items = _input.all()
for item in items: # Трансформация item['json']['name'] = item['json']['name'].upper() item['json']['email'] = item['json']['email'].lower() item['json']['isActive'] = item['json']['status'] == 'active'
return itemsТипичные трансформации
Заголовок раздела «Типичные трансформации»Преобразование типов
Заголовок раздела «Преобразование типов»// String → Numberconst num = parseInt($json.value, 10);const float = parseFloat($json.price);
// Number → Stringconst str = $json.count.toString();
// String → Booleanconst bool = $json.flag === 'true';
// String → Dateconst date = new Date($json.dateString);Работа со строками
Заголовок раздела «Работа со строками»// Обрезка пробеловconst trimmed = $json.name.trim();
// Разделениеconst parts = $json.fullName.split(' ');const firstName = parts[0];const lastName = parts[1];
// Объединениеconst fullAddress = `${$json.city}, ${$json.street}, ${$json.building}`;
// Заменаconst cleaned = $json.phone.replace(/[^0-9]/g, '');
// Форматированиеconst padded = $json.id.toString().padStart(5, '0');Работа с массивами
Заголовок раздела «Работа с массивами»// Фильтрацияconst active = $json.users.filter(u => u.isActive);
// Преобразованиеconst names = $json.users.map(u => u.name);
// Сортировкаconst sorted = $json.users.sort((a, b) => a.age - b.age);
// Поискconst admin = $json.users.find(u => u.role === 'admin');
// Уникальные значенияconst unique = [...new Set($json.tags)];
// Группировкаconst byRole = $json.users.reduce((acc, user) => { (acc[user.role] = acc[user.role] || []).push(user); return acc;}, {});Работа с объектами
Заголовок раздела «Работа с объектами»// Извлечение ключейconst keys = Object.keys($json.data);
// Извлечение значенийconst values = Object.values($json.data);
// Слияние объектовconst merged = { ...$json.defaults, ...$json.overrides };
// Удаление полейconst { password, ...safeData } = $json.user;
// Переименование ключейconst renamed = Object.fromEntries( Object.entries($json.data).map(([k, v]) => [k.toLowerCase(), v]));Date & Time Node
Заголовок раздела «Date & Time Node»Работа с датами и временем.
Операции
Заголовок раздела «Операции»| Операция | Описание |
|---|---|
| Calculate | Добавить/вычесть время |
| Format | Форматировать дату |
| Round | Округлить до единицы |
| Get Time Between Dates | Разница между датами |
Форматирование
Заголовок раздела «Форматирование»// Expressions для дат{{ $json.date.format('YYYY-MM-DD') }}{{ $json.date.format('DD.MM.YYYY HH:mm') }}{{ $now.format('YYYY-MM-DD') }}Часовые пояса
Заголовок раздела «Часовые пояса»// Конвертация часового пояса{{ $json.date.setZone('Europe/Moscow').toISO() }}JSON Node
Заголовок раздела «JSON Node»Конвертация между JSON и строкой.
Input: '{"name": "John", "age": 30}'Output: { name: "John", age: 30 }Stringify
Заголовок раздела «Stringify»Input: { name: "John", age: 30 }Output: '{"name":"John","age":30}'HTML Node
Заголовок раздела «HTML Node»Извлечение данных из HTML.
Extract
Заголовок раздела «Extract»// CSS selectorselector: 'div.product h2'// Результат: массив текстов из найденных элементов
// Атрибутыselector: 'a.link'attribute: 'href'Crypto Node
Заголовок раздела «Crypto Node»Хеширование и шифрование.
Операции
Заголовок раздела «Операции»| Операция | Примеры |
|---|---|
| Hash | MD5, SHA256, SHA512 |
| HMAC | HMAC-SHA256 |
| Encrypt | AES |
| Decrypt | AES |
Пример хеширования
Заголовок раздела «Пример хеширования»// В Expression{{ $json.password.hash('sha256') }}
// Или через ноду CryptoAction: HashType: SHA256Value: {{ $json.password }}Паттерны
Заголовок раздела «Паттерны»Нормализация данных
Заголовок раздела «Нормализация данных»// Привести к единому форматуreturn $input.all().map(item => ({ json: { id: String(item.json.id || item.json.ID || item.json._id), name: (item.json.name || item.json.title || '').trim(), email: (item.json.email || '').toLowerCase().trim(), phone: (item.json.phone || '').replace(/\D/g, ''), createdAt: new Date(item.json.created_at || item.json.createdAt).toISOString() }}));Валидация и очистка
Заголовок раздела «Валидация и очистка»const items = $input.all();
return items .filter(item => { // Валидация const email = item.json.email; return email && email.includes('@'); }) .map(item => ({ json: { ...item.json, // Очистка phone: item.json.phone?.replace(/[^0-9+]/g, ''), name: item.json.name?.trim().replace(/\s+/g, ' ') } }));Flatten вложенных структур
Заголовок раздела «Flatten вложенных структур»// Из { user: { name: 'John', address: { city: 'NYC' }}}// В { user_name: 'John', user_address_city: 'NYC' }
function flatten(obj, prefix = '') { return Object.keys(obj).reduce((acc, key) => { const pre = prefix.length ? `${prefix}_` : ''; if (typeof obj[key] === 'object' && obj[key] !== null && !Array.isArray(obj[key])) { Object.assign(acc, flatten(obj[key], pre + key)); } else { acc[pre + key] = obj[key]; } return acc; }, {});}
return [{ json: flatten($input.first().json) }];Следующие шаги
Заголовок раздела «Следующие шаги»- Expressions — выражения в n8n
- Code Node — программирование
- Структура данных — формат данных