تنظیم مقادیر
Set
دستکاری، تبدیل و بازسازی دادههای ورودی
نمای کلی
نود Set به شما اجازه میدهد دادههای ورودی را تغییر دهید، فیلدهای جدید اضافه کنید، فیلدهای موجود را حذف کنید یا داده را کاملاً بازسازی کنید.
قابلیتهای کلیدی:
- افزودن فیلدهای جدید
- ویرایش فیلدهای موجود
- حذف فیلدهای نامطلوب
- تبدیل فرمت داده
- محاسبات ریاضی
- ترکیب چند فیلد
- انتخاب فیلدهای خاص (Keep Only Set Fields)
کاربردها:
- پاکسازی دادهها (Data Cleaning)
- تبدیل فرمت (مثلاً تاریخ، عدد، متن)
- فیلتر کردن فیلدهای غیرضروری
- محاسبات (مثلاً محاسبه مالیات، تخفیف)
- ترکیب دادهها (نام + نام خانوادگی)
- استخراج بخشی از داده
حالتهای عملکرد:
- Manual Mapping: تعیین دستی فیلدها
- Keep Only Set Fields: فقط فیلدهای تعریف شده نگه داشته شود
- Remove Listed Fields: حذف فیلدهای مشخص شده
احراز هویت
احراز هویت
نود Set نیاز به احراز هویت ندارد.
این نود فقط دادههای ورودی را دستکاری میکند و به هیچ سرویس خارجی متصل نمیشود.
نکات کاربردی:
- میتوانید از Expression برای دسترسی به فیلدهای ورودی استفاده کنید
- پشتیبانی از JavaScript برای محاسبات پیچیده
- دسترسی به تاریخ/زمان، توابع ریاضی، متنی و...
عملیاتهای موجود
set
افزودن، ویرایش یا حذف فیلدهای داده
کاربردهای متداول
1. فیلتر کردن فیلدهای غیرضروری
فقط نگه داشتن فیلدهای مورد نیاز:
قبل:
{
"id": 123,
"name": "علی",
"email": "ali@example.com",
"password": "***",
"internal_id": "xyz",
"created_at": "..."
}بعد (Keep Only Set Fields: ON):
{
"id": 123,
"name": "علی",
"email": "ali@example.com"
}2. محاسبه مالیات و مبلغ نهایی
افزودن فیلدهای محاسبه شده:
ورودی:
{"price": 100000, "quantity": 3}Set:
- subtotal =
{{$json.price * $json.quantity}}→ 300000 - tax =
{{$json.subtotal * 0.09}}→ 27000 - total =
{{$json.subtotal + $json.tax}}→ 327000
خروجی:
{
"price": 100000,
"quantity": 3,
"subtotal": 300000,
"tax": 27000,
"total": 327000
}3. ترکیب نام و نام خانوادگی
ایجاد فیلد fullName:
Set:
- fullName =
{{$json.firstName}} {{$json.lastName}}
قبل:
{"firstName": "علی", "lastName": "محمدی"}بعد:
{"firstName": "علی", "lastName": "محمدی", "fullName": "علی محمدی"}4. تبدیل فرمت تاریخ
تبدیل به فرمت خواندنی:
Set:
- date =
{{$json.timestamp}} - persianDate =
{{$now.toFormat('yyyy-MM-dd')}} - jalali = فراخوانی تابع تبدیل به شمسی
5. استخراج اطلاعات از URL
جدا کردن بخشهای URL:
ورودی:
{"url": "https://example.com/products/123?ref=email"}Set (با JavaScript):
const url = new URL($json.url)
return {
domain: url.hostname,
productId: url.pathname.split('/')[2],
source: url.searchParams.get('ref')
}خروجی:
{
"domain": "example.com",
"productId": "123",
"source": "email"
}6. تبدیل قیمت ریال به تومان
محاسبه ساده:
Set:
- priceInToman =
{{$json.priceInRial / 10}}
7. اضافه کردن Timestamp
ثبت زمان پردازش:
Set:
- processedAt =
{{$now.toISO()}} - processedBy = "n8n-workflow"
8. فرمت شماره موبایل
یکدست سازی فرمت:
Set (با JavaScript):
let phone = $json.phone.replace(/\D/g, '') // حذف غیر عدد
if (phone.startsWith('98')) phone = '0' + phone.substring(2)
if (!phone.startsWith('0')) phone = '0' + phone
return { formattedPhone: phone }9. محاسبه تخفیف
تخفیف بر اساس درصد:
Set:
- discount =
{{$json.price * 0.15}}// 15% تخفیف - finalPrice =
{{$json.price - $json.discount}}
10. تبدیل به حروف بزرگ/کوچک
فرمت متن:
Set:
- upperName =
{{$json.name.toUpperCase()}} - lowerEmail =
{{$json.email.toLowerCase()}}
11. پاکسازی HTML از متن
حذف تگهای HTML:
Set (با JavaScript):
return {
cleanText: $json.description.replace(/<[^>]*>/g, '')
}12. ایجاد شناسه یکتا
تولید ID:
Set:
- orderId =
ORD-{{$now.toFormat('yyyyMMdd')}}-{{Math.floor(Math.random()*10000)}}
خروجی: ORD-20240115-7834
نکات حرفهای
💡 نکات حرفهای:
- 1Keep Only Set Fields: برای فیلتر کردن داده و نگه داشتن فقط فیلدهای مورد نیاز.
- 1توابع پرکاربرد در Expression:
// متن
{{$json.name.toLowerCase()}}
{{$json.name.toUpperCase()}}
{{$json.text.trim()}}
{{$json.email.includes('@')}}
// عدد
{{Math.round($json.price)}}
{{Math.ceil($json.price)}}
{{Math.floor($json.price)}}
{{Number($json.price).toFixed(2)}}
// تاریخ
{{$now.toISO()}}
{{$now.toFormat('yyyy-MM-dd')}}
{{$today.toMillis()}}
// آرایه
{{$json.items.length}}
{{$json.items[0]}}
{{$json.items.join(', ')}}- 1JavaScript Mode: برای محاسبات پیچیده از JavaScript استفاده کنید:
// باید Object برگردانید
return {
field1: value1,
field2: value2
}- 1Conditional Values: مقدار شرطی:
status = {{$json.isPaid ? 'پرداخت شده' : 'پرداخت نشده'}}- 1Default Values: مقدار پیشفرض برای فیلدهای خالی:
phone = {{$json.phone ?? '0912000000'}}
name = {{$json.name || 'نامشخص'}}- 1چند فیلد در یک Expression:
address = {{$json.street}}, {{$json.city}}, {{$json.country}}- 1دسترسی به نود قبلی:
previousData = {{$('NodeName').item.json.field}}- 1Debug کردن: داده خام را ببینید:
raw = {{JSON.stringify($json)}}- 1حذف فیلدهای null/undefined: با JavaScript:
const cleanData = {}
for (const key in $json) {
if ($json[key] != null) cleanData[key] = $json[key]
}
return cleanData- 1Rename فیلد: ایجاد فیلد جدید و حذف قدیمی:
newName = {{$json.oldName}}
// سپس در تنظیمات، oldName را حذف کنید- 1ترکیب آرایهها:
allItems = {{[...$json.items1, ...$json.items2]}}- 1استخراج Domain از Email:
domain = {{$json.email.split('@')[1]}}- 1فرمت قیمت: اضافه کردن جداکننده هزارگان:
formattedPrice = {{$json.price.toLocaleString('fa-IR')}}- 1محاسبه سن از تاریخ تولد:
age = {{Math.floor(($now - new Date($json.birthdate)) / 31557600000)}}- 1URL Encode:
encoded = {{encodeURIComponent($json.text)}}رفع مشکلات
خطاهای رایج
1. فیلد در خروجی نمایش داده نمیشود
علت: گزینه "Keep Only Set Fields" فعال است
راهحل
- اگر میخواهید فیلدهای قبلی هم باقی بمانند، این گزینه را OFF کنید
- یا فیلدهای قبلی را هم در Set تعریف کنید
2. Expression خطا میدهد
علت: فیلد وجود ندارد یا فرمت اشتباه است
راهحل
- فرمت صحیح:
{{$json.fieldName}} - بررسی کنید فیلد در ورودی وجود دارد
- از Null Coalescing:
{{$json.field ?? 'default'}}
3. محاسبات اشتباه است
علت: نوع داده String است نه Number
راهحل
- تبدیل به عدد:
{{Number($json.price)}} - یا:
{{parseInt($json.price)}} - یا:
{{parseFloat($json.price)}}
4. خطای "Cannot read property"
علت: فیلد null یا undefined است
راهحل
- استفاده از Optional Chaining:
{{$json.user?.name}} - یا:
{{$json.user ? $json.user.name : 'نامشخص'}}
5. JavaScript Mode کار نمیکند
علت: Syntax اشتباه است
راهحل
- باید یک Object برگردانید:
return {
fieldName: value
}- نه فقط مقدار
6. تاریخ فرمت اشتباه دارد
علت: Timezone یا فرمت نادرست
راهحل
- استفاده از
$now.toISO()برای فرمت استاندارد - یا
$now.toFormat('yyyy-MM-dd')برای فرمت دلخواه
7. فیلدهای قبلی پاک شدند
علت: "Keep Only Set Fields" فعال بوده
راهحل
- این گزینه را غیرفعال کنید
- یا همه فیلدهای مورد نیاز را تعریف کنید
