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