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, value 映射
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在使用Gson解析Json字符串的时候,遇到动态key,如何定义Gson所映射对象?以下所述方法同样适用于Jack...
- 在 App\Console\Commands下 添加以下内容的KeyGenerateCommand.php文件 将...
- 文/小面包 书目:《一个广告人的自由》 作者:大卫·奥格威 关键词:『去掉假把式』『练就真本领』『与高手同行』 为...