DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `util`.`json_removeNulls`(vObject JSON) RETURNS longtext CHARSET utf8mb4 COLLATE utf8mb4_bin DETERMINISTIC BEGIN /** * Elimina las propiedades con valor NULL de un objeto. * * @param vObject El objeto en formato JSON * @return El objeto JSON sin propiedades a NULL */ DECLARE vKeys JSON; DECLARE vPath VARCHAR(255); DECLARE vValue VARCHAR(255); DECLARE i INT DEFAULT 0; DECLARE vCount INT; SET vKeys = JSON_KEYS(vObject); SET vCount = JSON_LENGTH(vKeys); WHILE i < vCount DO SET vPath = CONCAT('$.', JSON_VALUE(vKeys, CONCAT('$[',i,']'))); SET vValue = JSON_VALUE(vObject, vPath); IF vValue IS NULL THEN SET vObject = JSON_REMOVE(vObject, vPath); END IF; SET i := i + 1; END WHILE; RETURN vObject; END$$ DELIMITER ;