GBase 8a
其他
文章

对json内容进行截取,获取json元素对应的值

发表于2025-07-28 14:37:2051次浏览0个评论

sql如下

select 
 trim(both '"' from regexp_substr(json_str, '"f8":(("[^"]+")|([^,"}]+))', 1, 1, 'i', 1)) as f8,
 trim(both '"' from regexp_substr(json_str, '"f9":(("[^"]+")|([^,"}]+))', 1, 1, 'i', 1)) as f9,
 trim(both '"' from regexp_substr(json_str, '"f12":(("[^"]+")|([^,"}]+))', 1, 1, 'i', 1)) as f12
from (
 select 
   '{"f1":"1395365","f2":"10067HBRE2024042800000000437192","f3":"20240428","f4":"8","f5":"2","f6":"1","f7":850.99,"f8":757.13,"f9":null,"f10":0.00,"f11":0.00,"f12":68.93}' 
   json_str 
 from dual
) tba;

REGEXP_SUBSTR 函数参数说明(以提取 id 为例):
json_str:要处理的字符串,即内层拼接好的 JSON 格式字符串。
'"id":"([^"]+)"[,} ]':正则表达式,含义是:
匹配 "id":" 开头,然后捕获一段不是双引号的内容(([^"]+) 是捕获组,用于提取 id 的值),最后以 ", 或 "} 或空格结尾 。
1:起始位置,从字符串第 1 个字符开始匹配。
1:匹配序号,取第 1 次匹配的结果。
'i':匹配模式,i 表示不区分大小写(这里实际大小写不影响,因为 JSON 里的键一般是固定写法,但保留该参数增强通用性 )。
1:捕获组序号,取第 1 个捕获组的内容(也就是 ([^"]+) 匹配到的部分,即 id 的实际值 )。

评论

登录后才可以发表评论