Files
Omni_orm.db/orm_retrive_json_v2.txt
2026-02-06 14:31:07 +08:00

64 lines
1.9 KiB
Plaintext

DELIMITER //
CREATE OR REPLACE FUNCTION orm_retrive_json_v2(
paras TEXT
)
RETURNS TEXT
DETERMINISTIC
/*
Function : orm_api_v2 [傳入 json 的資料預處理] 的核心程式, 被 orm_api_v2 呼叫使用
Description: 刪除 @para 多餘的內容(amis)
如果有特殊元件(如 transfer) 會多 POST 非 orm 所需的資料, 一樣要拿掉
picker 如果有設 joinValues:false, 也會多傳一些多餘的資料
Build Date : 2024-06-20
Modify History:
1 Michael 2023/12/16 原始版本
2 Michael 2024-06-20 改寫為MariaDB版本並優化
*/
BEGIN
DECLARE result TEXT;
DECLARE maxcount INT;
DECLARE currid INT;
DECLARE trans_data TEXT;
DECLARE json_valid BOOLEAN;
-- 檢查是否為有效JSON,如果是則直接處理,否則按原邏輯處理
SET json_valid = JSON_VALID(paras);
-- 進行一些操作,根據需求修改下面的程式碼
SET result = paras;
-- 處理 config 部分
SET maxcount = INSTR(result, '"config":[');
IF maxcount > 0 THEN
-- 在 config 後可能還有資料
SET trans_data = SUBSTRING(result FROM maxcount);
SET currid = INSTR(trans_data, '],');
SET trans_data = SUBSTRING(trans_data FROM currid + 2);
SET result = CONCAT(SUBSTRING(result FROM 1 FOR maxcount - 1), ' ', trans_data);
END IF;
-- 處理 token 部分(除非是電子書情況)
SET maxcount = INSTR(result, '"token"');
IF maxcount > 0 THEN
SET result = CONCAT(SUBSTRING(result FROM 1 FOR maxcount - 2), '}');
END IF;
-- 處理換行符
IF INSTR(result, '\\n') > 0 THEN
SET result = REPLACE(REPLACE(result, '\\r\\n', CHAR(10)), '\\n', CHAR(10));
END IF;
-- 如果是有效JSON,最後再驗證一次
IF json_valid THEN
IF NOT JSON_VALID(result) THEN
-- 如果處理後變無效,返回原始值
RETURN paras;
END IF;
END IF;
RETURN result;
END //
DELIMITER ;