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

Трансформация данных

Преобразование и обработка данных в n8n

НодаНазначение
SetСоздание/изменение полей
CodeПроизвольная логика
Edit FieldsПереименование, удаление полей
Date & TimeРабота с датами
CryptoХеширование, шифрование
HTMLПарсинг HTML
JSONКонвертация JSON

Универсальная нода для работы с данными.

РежимОписание
Manual MappingРучное указание полей
JSONВвод JSON напрямую

Добавление полей:

ПараметрПример
NamefullName
Value{{ $json.firstName }} {{ $json.lastName }}
ОпцияОписание
Keep Only SetОставить только новые поля
Include Other Input FieldsСохранить существующие
Ignore Type Conversion ErrorsИгнорировать ошибки типов

Переименование и удаление полей.

oldFieldName → newFieldName
user.name → userName

Полный контроль через JavaScript/Python.

// Трансформация данных
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 → Number
const num = parseInt($json.value, 10);
const float = parseFloat($json.price);
// Number → String
const str = $json.count.toString();
// String → Boolean
const bool = $json.flag === 'true';
// String → Date
const 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])
);

Работа с датами и временем.

ОперацияОписание
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 и строкой.

Input: '{"name": "John", "age": 30}'
Output: { name: "John", age: 30 }
Input: { name: "John", age: 30 }
Output: '{"name":"John","age":30}'

Извлечение данных из HTML.

// CSS selector
selector: 'div.product h2'
// Результат: массив текстов из найденных элементов
// Атрибуты
selector: 'a.link'
attribute: 'href'

Хеширование и шифрование.

ОперацияПримеры
HashMD5, SHA256, SHA512
HMACHMAC-SHA256
EncryptAES
DecryptAES
// В Expression
{{ $json.password.hash('sha256') }}
// Или через ноду Crypto
Action: Hash
Type: SHA256
Value: {{ $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, ' ')
}
}));
// Из { 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) }];