CREATE DEFINER=`your_dbname`@`%` FUNCTION `fn_Json_getKeyValue`(`in_JsonArray` VARCHAR(4096),`in_Index` tinyint,`in_KeyName` VARCHAR(64)) RETURNS varchar(512) CHARSET utf8
BEGIN
DECLARE vs_return VARCHAR(4096);
DECLARE vs_JsonArray, vs_Json, vs_KeyName VARCHAR(4096);
#declare vs_Json varchar(4096);
DECLARE vi_pos1, vi_pos2 SMALLINT UNSIGNED;
#获取json字段 key值
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
相关文章
- 对象转JSON 遇到的BigDecimal 科学计数法的问题,json转化字段单独处理
- mybatisplus如何处理Mysql的Json字段
- 利用MyBatis-Plus灵活处理JSON字段:技巧与最佳实践
- Newtonsoft.Json高级用法 1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称
- mysql5.7 新增的json字段类型
- 在.NET Core中使用MySQL5.7的JSON类型字段
- mysql5.7以下 json字段处理
- 为什么“jQueryUI自动完成”在以下场景中没有显示从自动完成启用输入字段中的PHP文件接收的json值?
- json数据处理技巧(字段带空格、增加字段)
- mysql5.7 新增的json字段类型用法实例分析