Contenido
Tutorial de expresiones en n8n: $json, $('nodo'), fechas y funciones útiles
Las expresiones permiten que los parámetros de los nodos cambien de forma dinámica según los datos. Puedes cambiar cualquier campo de parámetro al modo Expression (con el selector Fixed / Expression junto al campo o escribiendo {{ directamente).
Dentro de {{ }} se escribe JavaScript, así que puedes usar su sintaxis y sus métodos.
Leer los datos actuales: $json
{{ $json.name }}
{{ $json.address.city }}
{{ $json.tags[0] }}
{{ $json["nombre del campo"] }}
Si el nombre del campo contiene espacios o caracteres especiales, usa corchetes [...].
La forma más sencilla es arrastrar un campo desde el panel INPUT de la izquierda hasta el parámetro. n8n generará automáticamente la expresión correcta.

Leer datos de otros nodos: $('nombre del nodo')
$json solo puede leer la salida del nodo anterior. Para leer datos de un nodo anterior:
{{ $('Google Sheets').item.json.email }}
| Sintaxis | Significado |
|---|---|
$('nodo').item | El elemento correspondiente a los datos actuales (el más habitual) |
$('nodo').first() | El primer elemento que genera ese nodo |
$('nodo').last() | El último elemento |
$('nodo').all() | Todos los items (array) |
{{ $('Webhook').item.json.body.customer_id }}
{{ $('Obtener configuración').first().json.api_url }}
{{ $('Pedidos').all().length }} pedidos
Si cambias el nombre de un nodo, n8n actualizará automáticamente el nombre en las expresiones.
Procesar texto
{{ $json.name.trim() }}
{{ $json.email.toLowerCase() }}
{{ $json.title.slice(0, 50) }}…
{{ $json.text.replaceAll('\n', ' ') }}
{{ `Hola ${$json.name}, tu pedido ${$json.order_id} ya se ha enviado.` }}
{{ $json.tags.join('、') }}
n8n también ofrece algunos métodos adicionales:
{{ $json.email.isEmail() }}
{{ $json.content.extractUrl() }}
{{ $json.title.toTitleCase() }}
Números
{{ $json.price * 1.05 }}
{{ Math.round($json.score * 10) / 10 }}
{{ Number($json.amount).toLocaleString('zh-TW') }}
{{ ($json.done / $json.total * 100).toFixed(1) }}%
A veces, los números que devuelve una API son cadenas. Convierte el valor con Number() antes de calcular.
Condiciones
{{ $json.amount > 1000 ? 'VIP' : 'Normal' }}
{{ $json.nickname || $json.name }}
{{ $json.phone ?? 'No proporcionado' }}
Si necesitas seguir flujos distintos según una condición, usa los nodos If o Switch en lugar de gestionar la condición en una expresión.
Arrays
{{ $json.items.length }}
{{ $json.items.map(i => i.name).join(', ') }}
{{ $json.items.filter(i => i.stock === 0).length }}
{{ $json.scores.reduce((a, b) => a + b, 0) }}
Fecha y hora
n8n incluye la biblioteca de fechas Luxon. $now representa la hora actual y $today el inicio del día de hoy:
{{ $now.toFormat('yyyy-MM-dd HH:mm') }}
{{ $today.minus({ days: 1 }).toFormat('yyyy/MM/dd') }}
{{ $now.plus({ hours: 2 }).toISO() }}
{{ $now.setZone('Asia/Taipei').toFormat('dd/MM HH:mm') }}
{{ $now.weekday }} // 1 = lunes … 7 = domingo
Para analizar una cadena de fecha de los datos:
{{ DateTime.fromISO($json.created_at).toFormat('yyyy-MM-dd') }}
{{ DateTime.fromFormat($json.date, 'yyyy/MM/dd').plus({ days: 7 }).toISODate() }}
{{ $json.created_at.toDateTime().diffTo($now, 'days') }}
La zona horaria depende de la configuración de n8n o del flujo de trabajo. Recuerda configurarla como Asia/Taipei.
Variables integradas habituales
| Variable | Contenido |
|---|---|
$json | Los datos actuales |
$binary | Los archivos de los datos actuales |
$input.all() | Todos los items que recibe este nodo |
$now, $today | La hora actual y el día de hoy |
$execution.id | El ID de esta ejecución |
$execution.mode | test (prueba manual) o production |
$workflow.name | El nombre del flujo de trabajo |
$vars.name | Variables personalizadas (disponibles en algunos planes) |
$runIndex | El número de ejecución de este nodo durante esta ejecución |
Varias líneas y lógica compleja
Puedes escribir una función autoinvocada en una expresión:
{{ (() => {
const total = $json.items.reduce((s, i) => s + i.price * i.qty, 0);
return total >= 1000 ? total : total + 60;
})() }}
Pero si la lógica ocupa más de unas pocas líneas, te recomendamos usar el nodo Code, que resulta más fácil de leer y depurar.
Consejos para depurar
- Debajo del campo de expresión aparece una vista previa del resultado en tiempo real; el color rojo indica un error.
- La vista previa usa los datos de la ejecución anterior. Ejecuta primero los nodos anteriores para ver la vista previa.
Cannot read properties of undefinedsignifica que no existe alguno de los niveles de la ruta. Usa?.para evitar el error:{{ $json.address?.city }}.- Para ver todos los datos:
{{ JSON.stringify($json) }}.
Actualizado 12 de octubre de 2026