Oracle中如何使用JSON_QUERY动态获取JSON对象的键名列表
解决方案
你当前使用的JSON_QUERY是用于提取JSON中的值数据的,要获取JSON对象的顶层键名列表,直接使用Oracle专门提供的JSON_KEYS函数即可(Oracle 12c R2及以上版本原生支持)。
基础实现(返回标准JSON格式键名数组)
SELECT JSON_KEYS('{a:100, b:200, c:300}') AS key_list FROM DUAL;
执行结果:
["a","b","c"]
自定义格式(去掉引号,符合你期望的[a,b,c]格式)
如果不需要标准JSON的字符串引号,可以搭配REPLACE函数处理:
SELECT REPLACE(REPLACE(JSON_KEYS('{a:100, b:200, c:300}'), '"', '')) AS key_list FROM DUAL;
执行结果:
[a,b,c]
低版本兼容方案(12c R2以下版本,通过JSON_TABLE拆分后聚合)
如果你的数据库版本不支持JSON_KEYS,可以用JSON_TABLE拆分键值对后聚合生成结果:
SELECT '[' || LISTAGG(j.key, ',') WITHIN GROUP (ORDER BY j.pos) || ']' AS key_list FROM JSON_TABLE( '{a:100, b:200, c:300}', '$' COLUMNS ( NESTED PATH '$.*' COLUMNS ( pos FOR ORDINALITY, key VARCHAR2(100) PATH '$.key()' ) ) ) j;
内容的提问来源于stack exchange,提问作者samurai-jack07
相关产品推荐
相关产品推荐

