Ejercicio de expresiones de n8n: prepara actualizaciones sin perder valores válidos
Practica expresiones de n8n con registros sintéticos: distingue campos ausentes, null y vacíos, compara valores por defecto y prepara datos sin escrituras reales.

Comprobado con las fuentes citadas el .
Tu ejercicio de expresiones de n8n
Este ejercicio editorial utiliza expresiones de n8n para preparar los datos de una actualización manteniendo la distinción entre campos ausentes, null, cadenas vacías, cero y false. Tu tarea consiste en predecir cada resultado, inspeccionarlo en tu propio entorno y explicar cualquier diferencia. Las expresiones propuestas y los resultados esperados que aparecen a continuación no se han ejecutado ni validado.
Necesitas tu propio entorno de n8n Cloud o Self-hosted. n8n documenta expresiones a nivel de parámetro con vistas previas del valor calculado en ambos. Utiliza Edit Fields en modo JSON Output para proporcionar un registro sintético cada vez, seguido de otro nodo Edit Fields para el mapeo. No necesitas ninguna API externa ni credenciales.
Mantén este ejercicio en tu entorno local: prepara únicamente la salida. Las escrituras reales, la serialización HTTP y las reglas específicas del destino sobre omisión, borrado y validación quedan fuera de su alcance. Creemos que separar la preparación de los datos de su envío facilita razonar sobre las reglas de los campos.
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
Predice la presencia antes de elegir valores por defecto

Crea estas entradas por separado: {}, {"value":null}, {"value":""}, {"value":0}, {"value":false}, {"value":"Ada"}, {"value":[]} y {"value":{}}. Añade "unrelated":"drop-me" a cada registro. Primero predice si existe value y después evalúa {{ Object.prototype.hasOwnProperty.call($json, 'value') }}. MDN distingue la presencia de una propiedad propia de su valor, incluidos null o undefined.
Compara {{ $json.value ?? 'DEFAULT' }} con {{ $ifEmpty($json.value, 'DEFAULT') }}. MDN documenta que ?? aplica el valor por defecto a null y undefined; n8n documenta una política más amplia de valores vacíos para $ifEmpty(). Esta tabla de referencia de expresiones de n8n ofrece predicciones editoriales para compararlas con tu salida.
| Valor de entrada | ¿Clave propia? | Con ?? | Con $ifEmpty() |
|---|---|---|---|
| Ausente | false | DEFAULT | DEFAULT |
| null | true | DEFAULT | DEFAULT |
| Cadena vacía | true | Cadena vacía | DEFAULT |
| 0 | true | 0 | 0 |
| false | true | false | false |
| Ada | true | Ada | Ada |
| [] | 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
Construye los datos de actualización con una lista de campos permitidos

Para este ejercicio, utiliza una política diferente para las actualizaciones: omite un value ausente, conserva un null explícito y preserva cualquier otro valor proporcionado y su tipo. Permite únicamente la clave value en los datos de actualización. Estos son requisitos editoriales, no el contrato de un destino real. A nuestro juicio, los valores por defecto y la inclusión en una actualización merecen decisiones separadas porque responden a preguntas distintas.
Expresión propuesta para los datos de actualización: {{ { ...(Object.prototype.hasOwnProperty.call($json, 'value') ? { value: $json.value } : {}) } }}. MDN documenta que expandir un objeto vacío omite la propiedad, mientras que asignar undefined deja la propiedad presente. Esa distinción se refiere a los objetos de JavaScript.
Sigue esta secuencia propuesta en el nodo de mapeo. n8n documenta el uso de expresiones en JSON Output de Edit Fields y los controles para excluir los campos de entrada no mapeados; las etiquetas de los controles pueden variar entre instalaciones.
- Selecciona el modo JSON Output e introduce la expresión propuesta para los datos de actualización.
- Configura la inclusión de datos en la salida para excluir los campos de entrada originales.
- Inspecciona la vista previa calculada y después ejecuta el nodo de mapeo local.
- Compara la presencia de la clave, el valor y el tipo con tu predicción escrita para cada registro.
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
Resuelve problemas con los valores por defecto y las expresiones condicionales
Si cero o false se convierten en DEFAULT, comprueba si has utilizado ||. MDN documenta que || recurre al valor alternativo ante cualquier valor falsy, mientras que ?? conserva los valores distintos de null y undefined. Si los arrays u objetos vacíos se convierten en DEFAULT, compara ese resultado con la política documentada de $ifEmpty() de n8n.
En las expresiones de n8n, si una condición controla si una clave existe, inspecciona las claves del objeto resultante además del valor que se muestra. Las comprobaciones de presencia y la construcción condicional de objetos permiten cumplir ese requisito; una comprobación de veracidad por sí sola no puede distinguir todos los casos proporcionados.
Como ampliación opcional sobre el acceso a propiedades anidadas, el tutorial del proveedor escrito por Suyash Raj ilustra el patrón {{ $json.address?.city ?? 'Unknown' }}. Trátalo como una ampliación propuesta. Si la lógica falla después de trasladarla a un nodo Code, n8n documenta que las funciones auxiliares de transformación de nivel superior, como $if(), solo están disponibles en el editor de expresiones.
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
Criterios de finalización y reflexión
Termina registrando por separado los resultados previstos y los observados. Utiliza esta lista de comprobación editorial para decidir si el mapeo que propones cumple los requisitos del ejercicio.
Reflexión propuesta: ¿por qué sustituir un campo ausente por DEFAULT sería diferente de omitirlo? Explica qué expresión elige un valor alternativo y cuál decide si se incluye una propiedad. Antes de adaptar el resultado a una integración real, sustituye la política del ejercicio por el contrato documentado de ese destino.
Sources: Nullish coalescing operator (??) - JavaScript | MDN, Object.prototype.hasOwnProperty() - JavaScript | MDN, Spread syntax (...) - JavaScript | MDN


