暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在xugu数据库中实现对json格式数据处理的自定义函数

原创 Panda攀 2023-11-21
184

1、根据key值获取目标json中的value值

create or replace function json_extract(col varchar,in_ky varchar) return varchar
as
ret varchar;
tmp varchar;
keys varchar;
ky  varchar;
cnt int;
begin
  -- 获取key值
  ky:=substr(in_ky,1);
  -- 去除json串首尾的{}
  tmp:=substr(col,2,len(col)-2);
  -- 计算k-v对数量(算出分隔符逗号','的个数,然后+1即为k-v对数量)
  cnt:=len(tmp)-len(replace(tmp,',',''))+1;
  for i in 1..cnt loop
  -- 遍历每一组k-v对
  ret:=regexp_substr(tmp,'[^,]+',1,i);
  -- 获取k-v对的key值并做格式处理(去掉双引号'"')
  keys:=replace(regexp_substr(ret,'[^:]+',1,1),'"','');
  -- 判断key值是否匹配目标key,若匹配则返回对应的value值
  if ky=keys then
    return replace(regexp_substr(ret,'[^:]+',1,2),'"','');
  end if;
  end loop;
end;

实现效果:

select json_extract('{"key1":100,"key2":200}','key2');

在这里插入图片描述

select json_extract('{"苹果":apple,"橘子":orange,"香蕉":banana}','苹果');

在这里插入图片描述

2、把指定格式字符串转换为json数组

create type v_varray is varray(100) of varchar;
create or replace function json_array(chrlst_split_comma varchar) return v_varray
is
cnt int;
--type v_varray is varray(100) of varchar;
arraylist v_varray;
begin
	-- 计算入参中逗号分隔符的数量
	cnt := (length(chrlst_split_comma)-length(replace(chrlst_split_comma,',','')))/length(',');
	-- 扩展长度为分隔符数量+1(字符串数量)的数组
	arraylist.extend(cnt+1);
	for i in 1..cnt+1 loop
	-- 按数组下标依次赋值为对应位置的字符串
	arraylist(i) := regexp_substr(chrlst_split_comma,'[^,]+',1,i);
	end loop;
return arraylist;
end json_array;

实现效果:

select json_array('abc,你好,123456');

在这里插入图片描述

注:原文转自

在xugu数据库中实现对json格式数据处理的自定义函数

最后修改时间:2023-11-21 17:13:48
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论