33 lines
816 B
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 ;
|