随着非关系型数据大规模使用,以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--

oracle数据库解析json格式的更多相关文章

  1. Django 1.8.11 查询数据库返回JSON格式数据

    Django 1.8.11 查询数据库返回JSON格式数据 和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式 环境 Win10 Python2.7 Django 1.8.11 返回多 ...

  2. WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)

    DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...

  3. WP8解析JSON格式(使用Newtonsoft.Json包)

    DOTA2 WebAPI请求返回的格式有两种,一种是XML,一种是JSON,默认是返回JSON格式. 这里举一个简单的解析JSON格式的例子(更多JSON操作): { "response&q ...

  4. 解析json格式数据

    实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...

  5. 用GSON解析Json格式数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

  6. 实现android上解析Json格式数据功能

    实现android上解析Json格式数据功能,该源码转载于安卓教程网的,http://android.662p.com ,个人感觉还不错的,大家可以看看一下吧. package com.practic ...

  7. Python3基础 json.loads 解析json格式的数据,得到一个字典

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  8. $Java-json系列(一):用GSON解析Json格式数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

  9. 使用google的GSON解析json格式的数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

随机推荐

  1. 使用c#访问脚本里变量的方法

    首先,把要获取的变量权限定义为public类型变量. 方法一.public GameObject 另一个物体;    //监视面板拖拽赋值 另一个物体.GetComponent<脚本>() ...

  2. HTML 方法

    姓名输入框:<input type="text" value="默认有值"/> 密码输入框:<input type="text&qu ...

  3. struts(三) ---OGNL的学习和理解

    OGNL:Object graphic Navgation Language(对象图形的导航语言)

  4. C++成员变量内存对齐问题,ndk下非对齐的内存访问导致BUS_ADRALN

    同样的代码,在vs下运行正常,在android ndk下却崩溃: signal 7(SIGBUS),code 1 (BUS_ADRALN),fault addr 0xe6b82793 Func(sho ...

  5. jquery checkbox勾选/取消勾选的诡异问题

    <form> 你爱好的运动是?<input type="checkbox" id="CheckedAll" />全选/全不选<br ...

  6. linux驱动初探之杂项设备(控制两个GPIO口)

    关键字:linux驱动.杂项设备.GPIO 此驱动程序控制了外接的两个二极管,二极管是低电平有效. 上一篇博客中已经介绍了linux驱动程序的编写流程,这篇博客算是前一篇的提高篇,也是下一篇博客(JN ...

  7. MySQL学习笔记--数据类型

    一.数据类型(内容参考<SQL学习指南>)不完整 1.文本类型 文本类型 最大字节数 tinytext 255 text 65535 varchar 65536 mediumtext 16 ...

  8. 关于OPencv版本不符合,相关库变化问题

    由于OPencv发展迅速,已经省略了很多原来的库文件,奈何自己才疏学浅,所以只能把OPencv 1.0中的相关版本中的库文件一直过去. 链接: http://pan.baidu.com/s/1qY1Z ...

  9. UIScrollView 原理详解

    转载此文章原因:web页面在ipad的app中总是有橡皮筋效果,使用iscroll虽然能解决橡皮筋想过,但是滚动层内的元素事件都无法触发.故同安卓和ios一样使用后台解决...红色的为解决方案.. S ...

  10. HTML 文本格式化<b><big><em><i><small><strong><sub><sup><ins><del>

    <b> 标签-粗体 定义和用法: <b>标签规定粗体文本. 提示和注释 注释:根据 HTML5 规范,在没有其他合适标签更合适时,才应该把 <b> 标签作为最后的选 ...