美文网首页
mysql 5.6 通过 sql 获取字符串 json key

mysql 5.6 通过 sql 获取字符串 json key

作者: 程序猿_小刚 | 来源:发表于2018-08-02 15:33 被阅读0次
    CREATE  FUNCTION `fn_Json_getKeyValue`(
     in_JsonArray MEDIUMTEXT,# JSON数组字符串
     in_Index TINYINT,       # 从json 对象序号,序号从1开始
     in_KeyName VARCHAR(512) # 键名
    ) RETURNS varchar(2048) CHARSET utf8
    BEGIN
        # 定义参数
        DECLARE vs_Return VARCHAR(4096);
        DECLARE vs_JsonArray, vs_Json, vs_KeyName VARCHAR(4096);
        DECLARE vi_Pos1,vi_Pos2 SMALLINT UNSIGNED;
        
        # 写入监控日志 暂不记录
        
        SET vs_JsonArray = TRIM(in_JsonArray);
        SET vs_KeyName = TRIM(in_KeyName);
    
        IF vs_JsonArray = '' OR vs_JsonArray IS NULL
             OR vs_KeyName = '' OR vs_KeyName IS NULL
             OR in_Index <= 0 OR in_Index IS NULL THEN
             SET vs_Return = NULL;
        ELSE
             SET vs_JsonArray = REPLACE(REPLACE(vs_JsonArray, '[', ''), ']', '');
             # 取指定json 对象
             SET vs_Json = SUBSTRING_INDEX(SUBSTRING_INDEX(vs_JsonArray,'}', in_index),'}',-1);
             IF vs_Json = '' OR vs_json IS NULL THEN
                    SET vs_Return = NULL;
             ELSE
                  SET vs_KeyName = CONCAT('"',vs_KeyName,'":');
                    SET vi_Pos1 = INSTR(vs_Json,vs_KeyName);
                    IF vi_Pos1 > 0 THEN
                        # 键名不存在
                        SET vi_Pos1 = vi_Pos1 + CHAR_LENGTH(vs_KeyName);
                        SET vi_Pos2 = LOCATE(',',vs_Json,vi_Pos1);
                        IF vi_Pos2 = 0 THEN
                             SET vi_Pos2 = CHAR_LENGTH(vs_Json) + 1;
                        END IF;
                        SET vs_Return = REPLACE(MID(vs_Json,vi_Pos1,vi_Pos2-vi_Pos1),"",'');
                    END IF;
         END IF;
      END IF;
        RETURN vs_Return;
    END
    

    相关文章

      网友评论

          本文标题:mysql 5.6 通过 sql 获取字符串 json key

          本文链接:https://www.haomeiwen.com/subject/kdqsvftx.html