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
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.