oracle数据库解析json格式

随着非关系型数据大规模使用,以json格式产生的数据也出现在我所管理的Oracle数据库的CLOB字段里面,使用过程中就需要解析出指定键的值。

使用了最新版本

如果Oracle版本为12.1.0.2的,数据库直接支持SQL中解析字段中的json内容。具体使用可以参照Oracle的官方说明

早期版本

虽然没有原生的支持,但是可以通过安装开源的PLJSON包实现对JSON对象的操作。整个安装包可以从github下载。

以下步骤给出如何使用PLJSON的方式从字段的JSON内容中提取指定KEY值的VALUE。

  • 创建包含json内容的表。
create table pljson_table_test (num number not null, col clob);
insert into pljson_table_test values(1,
'{"data":
  {
   "name": "name 1",
   "description": "Cloud computing can support a company''s speed and agility, ...",
   "type": "link",
   "created_time": "2015-05-12T16:26:12+0000",
   "shares": { "count": 1 },
   "extra": "x1",
   "maps" : [ true ]
  }
}');
select num, name, map, count
from pljson_table_test,
table(
pljson_table.json_table( --需要解析的表
col,
pljson_varray('data.name', 'data.extra', 'data.maps', 'data.shares.count', 'data.missing'), --指定需要的解析的KEY值
pljson_varray('name', 'extra', 'map', 'count', 'whatelse')) --解析出来之后的字段别名
)
order by num
/

20180123 因回答网友问题,新增以下内容,用于处理json数组。
code:

declare
  list_value json_list := json_list('[{"code":"1","status":1},{"code":"2","status":0},{"code":"3","status":0},{"code":"4","status":0}]');
  code_value varchar(10);
  status_value int(2);
begin
  dbms_output.put_line('Count = '||list_value.count);
  for i in 1 .. list_value.count
  loop
     code_value := pljson_ext.get_string(json(list_value.get(i)),'code');
     status_value := pljson_ext.get_number(json(list_value.get(i)),'status');
     dbms_output.put_line('code = ' || code_value || '; status = ' || status_value ); 
  end loop;
end;
/

output:

Count = 4
code = 1; status = 1
code = 2; status = 0
code = 3; status = 0
code = 4; status = 0

--EOF--

posted on   camash  阅读(36291)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示