Entender las expressions: mapear $json, $node e items sin código

El mayor obstáculo de aprendizaje de n8n explicado: qué significan items, $json y $node y cómo mapear valores mediante arrastrar y soltar sin código.

Quien construye por primera vez un workflow en n8n llega tarde o temprano a un punto en el que un ajuste fijo de la interfaz ya no es suficiente: un valor debe provenir del node anterior, cambiar según los datos de entrada o provenir de un node completamente distinto más adelante en el workflow. Justo aquí comienza para muchos usuarios nuevos el mayor obstáculo de aprendizaje, porque de repente aparecen términos como $json, $node e items que, sin explicación, parecen código críptico. Sin embargo, detrás de esto hay un principio bastante simple, en cuanto queda claro cómo n8n transmite los datos entre nodes.

Este artículo explica con ejemplos concretos qué es realmente un item en n8n, cómo se relacionan $json y $node, y cómo mapeas valores mediante arrastrar y soltar, sin escribir tú mismo ni una sola línea de código. Se basa en la documentación oficial de n8n sobre expressions y sobre la estructura de datos interna, con fecha de julio de 2026.

¿Qué es realmente un item en n8n?

n8n transmite los datos entre nodes siempre como un array de objetos, y cada elemento individual de este array se denomina item. Según la documentación de n8n sobre la estructura de datos cada item tiene la forma fija `{ json: {...} }`, donde los datos útiles reales se encuentran siempre bajo la clave json. Un ejemplo con dos items se ve así:

  • Item 1: `{ json: { name: "Anna", plz: "18055" } }`
  • Item 2: `{ json: { name: "Jonas", plz: "23552" } }`

Importante para la comprensión: un node en n8n procesa por lo general cada item individualmente y repite su acción configurada para cada elemento del array. Si un node HTTP Request recibe dos items, por defecto también envía dos solicitudes, una por item. Quien haya interiorizado esto, entiende también por qué las expressions en n8n siempre se refieren al item que se está procesando actualmente y no a la lista completa.

$json: acceder al item actual

$json es la variable más usada en las expressions de n8n y representa los datos json del item que el node actual está procesando. $json es en realidad una forma abreviada de $input.item.json, el item de entrada del node actual. Si, por ejemplo, quieres mostrar en el siguiente node el nombre del ejemplo anterior, escribes en un campo de texto:

`{{ $json.name }}`

n8n reemplaza esta expression en el momento de la ejecución por el valor real del item correspondiente, por lo que con dos items sería una vez "Anna" y otra vez "Jonas". Puedes acceder a campos anidados con notación de punto, por ejemplo `{{ $json.adresse.plz }}`, siempre que los datos estén estructurados en consecuencia.

$node y $(): obtener datos de otros nodes

En cuanto un valor no deba provenir del node inmediatamente anterior, sino de cualquier otro node más adelante en el workflow, $json ya no es suficiente. Justo para eso existe $node, o su sucesor $(). En workflows y tutoriales más antiguos encontrarás a menudo todavía la notación `$node["Node-Name"].json.feld`, esta sintaxis se considera ahora obsoleta. La forma actual, descrita en la documentación de n8n sobre cómo referenciar nodes anteriores es:

`{{ $('Node-Name').item.json.feld }}`

Si quieres no solo el item actualmente vinculado, sino específicamente el primero, el último o todos los items de un node determinado, dispones además de `$('Node-Name').first()`, `$('Node-Name').last()` y `$('Node-Name').all()`. Si encuentras en un workflow una expression antigua escrita con $node, vale la pena actualizarla en algún momento a la notación $(), para que siga funcionando de forma fiable también tras futuras actualizaciones de n8n.

Ejemplo: obtener una dirección de correo electrónico de un node de formulario anterior

Supongamos que un workflow comienza con un node de formulario llamado "Kontaktformular", que entre otras cosas captura una dirección de correo electrónico. Tres nodes más adelante, en una llamada HTTP Request a un CRM, necesitas de nuevo exactamente esa dirección, aunque los nodes intermedios ya no contengan datos de correo electrónico. La expression para esto es:

`{{ $('Kontaktformular').item.json.email }}`

Así accedes directamente al item original del node Kontaktformular, independientemente de lo que hayan hecho los nodes intermedios con los datos.

Mapeo sin código: arrastrar y soltar en n8n

La forma más cómoda de acercarse a las expressions no pasa en absoluto por escribir código. En el panel de entrada de un node, n8n muestra los datos entrantes como lista o tabla, y cada campo individual se puede arrastrar directamente con el ratón a un campo de parámetro. n8n genera automáticamente a partir de esto la expression correspondiente, por ejemplo `{{ $json.fruit }}`, sin que necesites conocer tú mismo la sintaxis. Según la documentación de n8n sobre expressions frente a nodes de transformación de datos este método resulta especialmente útil cuando solo quieres tomar un único valor de datos anteriores, porque n8n muestra directamente en la vista previa qué valor concreto se usará en la ejecución. Para operaciones como ordenar, combinar o eliminar duplicados, la documentación recomienda en cambio los nodes de transformación de datos ya preparados, porque estos prescinden de cualquier expression y se manejan mediante una interfaz guiada.

Trampas típicas al empezar

  • Confundir un item con la lista completa: $json siempre devuelve solo el item actual, nunca todos los items a la vez. Quien quiera recorrer todos los items necesita $input.all() o $('Node-Name').all() y, por lo general, alguna lógica de bucle o un node Code.
  • Sintaxis $node obsoleta de tutoriales antiguos: Muchos tutoriales más antiguos en internet aún muestran $node["Name"].json, lo que puede provocar errores en las versiones actuales de n8n. La referencia de expressions de la documentación utiliza en cambio, de forma consistente, la notación $().
  • Falta la clave json en tu propio código: Si devuelves tú mismo datos en un node Code, debes tener en cuenta que cada objeto devuelto debe estar de nuevo envuelto en `{ json: {...} }`, de lo contrario n8n reporta un error.
  • La expression no muestra ningún valor: Casi siempre se debe a que el node referenciado aún no se ha ejecutado en esta ruta de ejecución, o a que el campo en el item actual está realmente vacío. Un vistazo al panel de entrada del node afectado aclara esto más rápido que cualquier búsqueda de errores en el código.

Una vez que has interiorizado estos cuatro puntos, has superado el mayor obstáculo de entrada en n8n y a partir de ahí mantienes el control sobre tus propios workflows, incluso sin experiencia en desarrollo. Quien, a pesar de ello, prefiera contar con apoyo experimentado para construir automatizaciones más complejas, lo encuentra en la automatización n8n de NordFlux una implementación a precio fijo y con soberanía de datos alemana.

Preguntas frecuentes

¿Cuál es la diferencia entre $json y $input.item?

$json es una forma abreviada de $input.item.json y devuelve directamente los datos json del item actual. $input.item, en cambio, devuelve el objeto item completo incluyendo una posible clave binary, por lo que $json en la práctica es casi siempre la vía más corta y habitual cuando solo quieres acceder a valores de campo normales.

¿Por qué veo $node en lugar de $() en workflows antiguos?

$node["Name"].json era la sintaxis original para referenciar datos de un node determinado, pero ahora se considera obsoleta. n8n recomienda en su lugar la notación $('Name'), que gestiona de forma más estable los cambios de nombre y las futuras versiones. Los workflows antiguos con $node en general siguen funcionando, pero deberían actualizarse en la próxima oportunidad.

¿Puedo usar también $json para acceder a un campo de un node completamente distinto?

No, $json siempre se refiere solo al item del flujo de datos que entra directamente en el node actual. Para campos de cualquier otro node situado más adelante en el workflow, necesitas la notación $('Node-Name').item.json.feldname, tal como se describe en la documentación sobre cómo referenciar nodes anteriores.

¿Tengo que escribir siempre las expressions a mano?

No, la mayoría de las veces no. Puedes arrastrar campos desde el panel de entrada directamente a un campo de parámetro, n8n genera automáticamente la expresion correspondiente. Escribir a mano vale la pena sobre todo cuando quieres acceder a datos de un node más alejado o quieres procesar además los valores con métodos como .toUpperCase() o .map().

¿Qué ocurre si un item no contiene en absoluto el campo referenciado?

Entonces la expression suele devolver undefined o un valor vacío, en lugar de un error, a menos que accedas a un campo de un objeto anidado que en sí mismo no exista. En esos casos, la función $ifEmpty() de la referencia de expressions ayuda a insertar automáticamente un valor por defecto, en lugar de interrumpir la ejecución.

Sobre NordFlux

NordFlux UG (haftungsbeschränkt)

NordFlux crea empleados digitales para las organizaciones: automatizaciones y agentes KI que asumen el trabajo repetitivo. Usted mantiene el control.

Más sobre nosotros
Análisis inicial gratuito

¿Preguntas concretas sobre automatización o IA?

En un análisis inicial gratuito hablamos directamente de su caso. Sin compromiso.