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 ;