← Назад до блогу

Вправа з виразів n8n: готуємо оновлення без втрати коректних значень

Практикуйте вирази n8n на синтетичних записах: розрізняйте відсутні поля, null і порожні значення, порівнюйте підстановки та готуйте дані без запису в зовнішні системи.

Учасник сортує предмети, що позначають різні значення полів, у пакунок, практикуючи вирази n8n для підготовки оновлення.

Перевірено за наведеними джерелами .

Ваша вправа з виразів n8n

Ця редакційна вправа використовує вирази n8n для підготовки даних оновлення, зберігаючи відмінності між відсутніми полями, null, порожніми рядками, нулем і false. Ваше завдання — передбачити кожен результат, перевірити його у власному середовищі та пояснити розбіжності. Наведені нижче запропоновані вирази й очікувані результати не виконувалися та не перевірялися.

Вам потрібне власне середовище n8n Cloud або Self-hosted. n8n документує вирази на рівні параметрів із попереднім переглядом обчислених значень в обох варіантах. Використовуйте Edit Fields у режимі JSON Output, щоб подавати по одному синтетичному запису, а після нього додайте ще один вузол Edit Fields для зіставлення полів. Зовнішній API та облікові дані не потрібні.

Виконуйте вправу локально: лише готуйте вихідні дані. Запис у зовнішні системи, серіалізація HTTP і правила конкретної цільової системи щодо пропуску, очищення та перевірки полів виходять за її межі. На нашу думку, відокремлення підготовки даних від їх надсилання допомагає краще зрозуміти правила роботи з полями.

Sources: n8n-docs/docs/build/work-with-data/expressions-versus-data-nodes.md at main · n8n-io/n8n-docs · GitHub, n8n-docs/docs/integrations/builtin/core-nodes/n8n-nodes-base.set.md at main · n8n-io/n8n-docs · GitHub

Передбачте наявність поля, перш ніж обирати значення за замовчуванням

Два лотки порівнюють вузькі та широкі правила підстановки для порожніх і falsy-значень полів із вправи.
Парні лотки ілюструють, як різні правила підстановки можуть зберігати або замінювати різні види значень.

Створіть такі окремі вхідні записи: {}, {"value":null}, {"value":""}, {"value":0}, {"value":false}, {"value":"Ada"}, {"value":[]} і {"value":{}}. Додайте "unrelated":"drop-me" до кожного запису. Спочатку передбачте, чи існує value, а потім обчисліть {{ Object.prototype.hasOwnProperty.call($json, 'value') }}. MDN розрізняє наявність власної властивості та її значення, зокрема null або undefined.

Порівняйте {{ $json.value ?? 'DEFAULT' }} із {{ $ifEmpty($json.value, 'DEFAULT') }}. MDN документує, що ?? підставляє значення за замовчуванням для null та undefined; n8n документує ширші правила визначення порожніх значень для $ifEmpty(). Ця шпаргалка з виразів n8n містить редакційні прогнози для порівняння з вашими результатами.

Прогнозовані результати для синтетичного поля value
Вхідне значенняВласний ключ?З ??З $ifEmpty()
ВідсутнєfalseDEFAULTDEFAULT
nulltrueDEFAULTDEFAULT
Порожній рядокtrueПорожній рядокDEFAULT
0true00
falsetruefalsefalse
AdatrueAdaAda
[]true[]DEFAULT
{}true{}DEFAULT

Sources: n8n-docs/docs/build/work-with-data/transform-data/expression-reference/root.md at main · n8n-io/n8n-docs · GitHub, Nullish coalescing operator (??) - JavaScript | MDN, Object.prototype.hasOwnProperty() - JavaScript | MDN

Сформуйте дані оновлення лише з дозволених полів

Рука вибирає один предмет, що позначає дозволене поле, залишаючи сторонні вхідні дані поза підготовленим пакунком оновлення.
Послідовність відбору ілюструє підготовку даних лише з дозволених полів із виключенням сторонніх вхідних даних.

Для цієї вправи застосуйте інші правила оновлення: пропускайте відсутнє value, залишайте явно задане null і зберігайте всі інші передані значення та їхні типи. Дозвольте лише ключ value у даних оновлення. Це редакційні вимоги, а не контракт реальної цільової системи. На нашу думку, вибір значень за замовчуванням і включення полів до оновлення потребують окремих рішень, оскільки відповідають на різні запитання.

Запропонований вираз для даних оновлення: {{ { ...(Object.prototype.hasOwnProperty.call($json, 'value') ? { value: $json.value } : {}) } }}. MDN документує, що розгортання порожнього об’єкта пропускає властивість, тоді як присвоєння undefined залишає її наявною. Ця відмінність стосується об’єктів JavaScript.

Виконайте запропоновану послідовність у вузлі зіставлення полів. n8n документує вирази в режимі JSON Output вузла Edit Fields і налаштування виключення вхідних полів, які не були зіставлені; назви елементів керування можуть відрізнятися між інсталяціями.

  1. Виберіть режим JSON Output і введіть запропонований вираз для даних оновлення.
  2. Налаштуйте склад вихідних даних так, щоб виключити початкові вхідні поля.
  3. Перевірте попередній перегляд обчисленого результату, а потім виконайте локальний вузол зіставлення.
  4. Для кожного запису порівняйте наявність ключа, значення та тип зі своїм письмовим прогнозом.

Sources: n8n-docs/docs/integrations/builtin/core-nodes/n8n-nodes-base.set.md at main · n8n-io/n8n-docs · GitHub, Object.prototype.hasOwnProperty() - JavaScript | MDN, Spread syntax (...) - JavaScript | MDN

Усуньте проблеми зі значеннями за замовчуванням та умовними виразами

Якщо нуль або false перетворюється на DEFAULT, перевірте, чи не використали ви ||. MDN документує, що || підставляє запасне значення для будь-якого falsy-значення, тоді як ?? зберігає всі значення, крім null та undefined. Якщо порожні масиви або об’єкти перетворюються на DEFAULT, порівняйте цей результат із задокументованими правилами $ifEmpty() у n8n.

Якщо у виразах n8n умова визначає, чи існує ключ, перевіряйте ключі отриманого об’єкта, а також відображене значення. Перевірки наявності та умовне формування об’єкта дають змогу виконати цю вимогу; сама лише перевірка істинності не розрізняє всі наведені випадки.

Як необов’язкове розширення вправи на доступ до вкладених властивостей, навчальний матеріал постачальника від Suyash Raj ілюструє шаблон {{ $json.address?.city ?? 'Unknown' }}. Сприймайте його як запропоноване доповнення. Якщо логіка перестає працювати після перенесення до вузла Code, зверніть увагу: n8n документує, що допоміжні функції перетворення верхнього рівня, як-от $if(), доступні лише в редакторі виразів.

Sources: n8n-docs/docs/build/work-with-data/transform-data/expression-reference/root.md at main · n8n-io/n8n-docs · GitHub, Nullish coalescing operator (??) - JavaScript | MDN, n8n Expressions and JavaScript in Workflows, Object.prototype.hasOwnProperty() - JavaScript | MDN, Spread syntax (...) - JavaScript | MDN, n8n-docs/docs/build/code-in-n8n/use-built-in-shortcuts.md at main · n8n-io/n8n-docs · GitHub

Критерії завершення та запитання для роздумів

На завершення окремо запишіть прогнозовані та фактичні результати. Скористайтеся цим редакційним контрольним списком, щоб визначити, чи відповідає запропоноване зіставлення вимогам вправи.

Запитання для роздумів: чим заміна відсутнього поля на DEFAULT відрізняється від його пропуску? Поясніть, який вираз вибирає запасне значення, а який визначає, чи включати властивість. Перш ніж адаптувати результат до реальної інтеграції, замініть правила вправи задокументованим контрактом цільової системи.

Sources: Nullish coalescing operator (??) - JavaScript | MDN, Object.prototype.hasOwnProperty() - JavaScript | MDN, Spread syntax (...) - JavaScript | MDN

Спробуйте на практиці

Практичні завдання з n8n

Оберіть завдання й створіть робочий воркфлоу у власному середовищі n8n – до кожного завдання є п’ять поступових підказок.

Спробувати практичне завдання

Для вашої команди

Програми навчання n8n для однієї команди чи відділу – на вашому власному екземплярі n8n, з вашими інструментами й даними.

Навчання для вашої команди

Оцінка навичок n8n

Безкоштовний тест приблизно на 20 хвилин, англійською: 30 запитань у 10 напрямах і рівень від початківця до експерта. На AI Adoption Score – іншому проєкті автора цього сайту.

Дізнатися свій рівень n8n