salix/db/routines/util/functions/json_removeNulls.sql

33 lines
816 B
SQL

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 ;