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 ;
