如何创建 MySQL 函数来检查 JSON 有效性?

Jos*_*off 3 mysql syntax json function case

我对 MySQL 相当陌生,但我想创建一个函数来验证存储在我的数据库表中的 JSON 对象。

我查找了有关创建函数的信息,但一定缺少一些东西,因为我似乎无法让它工作。看起来并不太复杂,但也许我没有使用适当的语法。

这是我的代码:

DELIMITER //

CREATE FUNCTION CHECKJSON( DB_NAME varchar(255), TABLE_NAME varchar(255),    JSON_COLUMN varchar(255)) 
RETURNS varchar(300)
BEGIN
    DECLARE notNullCount int; 
    DECLARE validJSONCount int; 
    DECLARE result varchar(300); 

    SET notNullCount = (SELECT count(*) FROM DB_NAME.TABLE_NAME WHERE JSON_COLUMN IS NOT NULL);
    set validJSONCount = (SELECT count(*) FROM DB_NAME.TABLE_NAME WHERE JSON_VALID(JSON_COLUMN) > 0); 

    CASE 
        WHEN (validJSONCount = notNullCount) THEN 
            SET result = CONCAT('VALID JSON COUNT: ', validJSONCount) 
        ELSE 
            SET result = CONCAT('INVALID JSON COUNT: ', (notNullCount - validJSONCount)) 
    END; 
    RETURN result; 
END //

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此代码时,收到以下错误消息:“错误代码:1064。您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以获取在 'ELSE SET 附近使用的正确语法”结果 = CONCAT('INVALID JSON COUNT: ', (notNullCount - validJSONC' at line 14"

关于如何改进这段代码有什么想法吗?谢谢!

Sta*_*nko 5

从 MySQL 5.7 开始,你有一个漂亮而简单的函数来实现这一点:

JSON_VALID(value)

返回 0 或 1 以指示值是否是有效的 JSON。如果参数为 NULL,则返回 NULL。

https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-valid