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 · Actualizada

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, undefined se convierte en null para conservar su posición. Las funciones y los símbolos siguen la misma regla de omisión o sustitución por null. No ocurre así con todos los valores no admitidos: un BigInt sin tratamiento específico hace que JSON.stringify lance un error en vez de insertar null.

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.