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
nullsin saber si significa borrado. - Comprobar únicamente
obj.campo == null, que en JavaScript agrupanullyundefinedmediante 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.