Guía

JSON: diferencia entre null, campo ausente y undefined

Distingue un valor null, una propiedad que no existe y undefined en JavaScript para evitar cambios silenciosos en APIs y serialización.

por Tools in a Tab · Publicado el · Revisado el

Respuesta breve

En JSON, null es un valor explícito y un campo ausente simplemente no forma parte del objeto. undefined no pertenece a la sintaxis JSON: es un valor de JavaScript y de otros entornos. Al serializar, confundir estos tres estados puede eliminar propiedades o cambiar elementos de un array.

Tres casos diferentes

{ "segundoNombre": null }

Este documento afirma que la propiedad existe y su valor es null. En cambio:

{}

no contiene información sobre segundoNombre. El significado de esa ausencia depende del contrato de la API: podría indicar «no modificar», «usar el valor por defecto» o ser un error. JSON por sí solo no decide esa semántica.

Este texto no es JSON válido:

{ "segundoNombre": undefined }

El validador JSON lo rechaza porque undefined no es uno de los literales permitidos.

Qué hace JSON.stringify en JavaScript

La serialización tampoco trata igual propiedades y arrays:

JSON.stringify({ a: undefined, b: null });
// {"b":null}

JSON.stringify([undefined, null]);
// [null,null]

Una propiedad cuyo valor es undefined se omite. En un array, una posición no serializable se convierte en null para conservar la longitud. Una función o un símbolo pueden producir efectos equivalentes según su posición.

Por eso conviene inspeccionar el texto final que se enviará, no solo el objeto JavaScript anterior a la serialización.

Cómo diseñar el contrato de una API

Define por separado qué significa cada estado permitido:

  • Campo ausente: no se envió una decisión sobre ese dato.
  • Campo con null: se envió deliberadamente un valor nulo.
  • Campo con un valor: se envió un dato concreto.

En una actualización parcial, algunas APIs interpretan la ausencia como «dejar igual» y null como «borrar», pero no es una regla universal. Documenta y prueba el comportamiento. Si null no está permitido, exprésalo en el esquema o en la validación del servidor.

Errores frecuentes

  • Escribir "undefined" y creer que representa ausencia; solo es una cadena.
  • Sustituir valores desconocidos por null sin saber si significa borrado.
  • Comprobar únicamente obj.campo == null, que en JavaScript agrupa null y undefined mediante igualdad no estricta.
  • Serializar antes de detectar propiedades omitidas y perder la evidencia.
  • Suponer que un conversor puede recuperar un campo que nunca llegó al JSON.

El RFC 8259 enumera null entre los valores JSON y no incluye undefined. El algoritmo normativo de JSON.stringify define las omisiones y sustituciones de JavaScript. Valida el documento final y trata la semántica de ausencia como parte explícita del contrato.