Oracle中实现JSON格式数据存取的方法、装置、设备及存储介质与流程

文档序号:15047478发布日期:2018-07-27 23:00阅读:1155来源:国知局

本发明涉及数据库领域,尤其涉及一种oracle中实现json格式数据存取的方法、装置、设备及存储介质。



背景技术:

在互联网的大开发环境下,json作为一种轻量级的、友好的webservices客户端的格式被广泛应用;oracle数据库产品在数据库行业占有很大的份额,相对于2013年6月才发布的oracle12c,其中oracle11g、oracle10g、oracle9i等占有绝大份额;遗憾的是oracle11g以及较前版本并没有支持json数据格式的方案。

当前支持json数据格式的方案有json_ext库以及附属的其他库(在下文统一以json_ext库作为名称)。在转换时候采用的方法是:先将结果数据按xsl模板,转换成xml数据格式,再从xml格式中将数据提取转换成json格式。其数据存取和转换路径如下:字符串/数字->xls->xml->自定义的json->字符串/数字。

但发明人在实施本发明的过程中发现,当前方案至少存在如下缺陷:

1.json_ext库内部实现引用了xls模板和xml格式,格式转换冗长;

2.json_ext库以及附属库较多,代码冗余,内部调用复杂,难以维护;

3.json_ext库的json数据转换速度慢,在较大数据量的环境下尤为明显;

4.json_ext库调用时,占有的oracle数据库资源较多,难以应对互联网环境的高并发需求;

5.json_ext库在处理未知的数据格式或特殊字符时,会出现异常;



技术实现要素:

针对上述问题,本发明的目的在于提供一种oracle中实现json格式数据存取的方法、装置、设备及存储介质,在oracle中实现json格式数据的便捷、快速以及高效的存储以及读取。

本发明实施例提供了一种oracle中实现json格式数据存取的方法,包括以下步骤:

读取json数据及所述json数据的待读取的键;

在所述json数据中获取所述待读取的键的位置,标记为第一索引位置;

根据所述第一索引位置获取位于所述第一索引位置后的第一个标记字符“:”的位置,并标记为第二索引位置;

对所述json数据的所述第二索引位置后的字符进行遍历,直至在遍历过程中检测到的关键字符都成对出现;

根据所述关键字符的位置,获取与待读取的键对应的值。

优选地,所述关键字符包括:“{”及与“{”构成一对的“}”,“[”及与“[”构成一对的“]”,“"”。

优选地,在读取json数据及所述json数据的待读取的键之前,还包括:

判断json数据是否满足json标准格式。

优选地,当所述json数据为json对象数组时,还包括:

根据关键字符“{”、“}”的对数,获取所述json对象数组的值的对象个数以及每个对象。

优选地,还包括:

根据所述关键字符的位置及所述第二索引位置,删除与待读取的键对应的值。

优选地,还包括:

读取oracle字符串;

获取oracle字符串的键及与键对应的值,并将键和值存储成json对象格式的字符串或者json数组格式的字符串。

优选地,还包括:

将oracle游标转换成json对象格式的字符串。

本发明实施例还提供了一种oracle中实现json格式数据存取的装置,包括:

数据读取单元,用于读取json数据及所述json数据的待读取的键;

第一索引单元,用于在所述json数据中获取所述待读取的键的位置,标记为第一索引位置;

第二索引单元,用于根据所述第一索引位置获取位于所述第一索引位置后的第一个标记字符“:”的位置,并标记为第二索引位置;

遍历单元,用于对所述json数据的所述第二索引位置后的字符进行遍历,直至在遍历过程中检测到关键字符都成对出现;

值获取单元,用于根据所述关键字符的位置,获取与待读取的键对应的值。

本发明实施例还提供了一种oracle中实现json格式数据存取的设备,包括存储器、处理器以及存储在所述存储器内的计算机程序,所述计算机程序能够被所述处理器执行,以实现如上述的oracle中实现json格式数据存取的方法。

本发明实施例还提供了一种计算机可读存储介质,存储有可执行代码,其中,所述可执行代码经配置为被至少一个处理器执行,以实现上述的oracle中实现json格式数据存取的方法。

附图说明

为了更清楚地说明本发明的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的oracle中实现json格式数据存取的方法的流程示意图。

图2是本发明实施例提供的oracle中实现json格式数据存取的装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,本发明实施例提供了一种oracle中实现json格式数据存取的方法,其可由安装有oracle数据库的设备来执行,并包括以下步骤:

s101,读取json数据及所述json数据的待读取的键。

s102,在所述json数据中获取所述待读取的键的位置,标记为第一索引位置。

s103,根据所述第一索引位置获取位于所述第一索引位置后的第一个标记字符“:”的位置,并标记为第二索引位置。

s104,对所述json数据的所述第二索引位置后的字符进行遍历,直至在遍历过程中检测到关键字符都成对出现。

s105,根据所述关键字符的位置,获取与待读取的键对应的值。

在本实施例中,所述设备可为计算机、服务器等,其安装有oracle数据库,oracle数据库系统是美国oracle公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(client/server)或b/s体系结构的数据库之一。比如silverstream就是基于数据库的一种中间件。oracle数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了oracle知识,便能在各种类型的机器上使用它。

由于在oracle11g以及较前版本并没有支持json数据格式的方案,为此,本发明实施例创造性的以oracle内置函数和pl/sql技术(过程化sql语言,是oracle对标准数据库语言sql的过程化扩充,它将数据库技术和过程化程序设计语言联系起来,是一种应用开发语言,可使用循环,分支处理数据,将sql的数据操纵功能与过程化语言数据处理功能结合起来.pl/sql的使用,使sql成为一种高级程序设计语言,支持高级语言的块操作,条件判断,循环语句,嵌套等,与数据库核心的数据类型集成,使sql的程序设计效率更高)为基础,提供了一系列轻量级的函数和方法,供开发者调用,实现oracle数据格式和json数据格式的相互转换,能通用于oracle产品,编译后即可调用,较完美的嵌入到oracle产品中。

以下将以一些例子来说明本发明实施例的转换过程:

假设当前的json数据(json字符串)为'{"example":"json","key":{"subkey":"subvalue"}}',待读取的键为“key”,则所述设备在接收到json数据后,首先在所述json数据中获取所述待读取的键(“key”)的位置,并标记为第一索引位置,其中,所述设备可通过对json字符串遍历来获取待读取的键的位置。在获得第一索引位置后,所述设备获取位于所述第一索引位置后的第一个标记字符“:”的位置,并标记为第二索引位置。接着,所述设备对所述json数据的所述第二索引位置后的字符进行遍历,直至在遍历过程中检测到的关键字符都成对出现。其中,所述关键字符包括:“{”及与“{”构成一对的“}”,“[”及与“[”构成一对的“]”,“"”。

以下详细说明本实施例的遍历过程,设备从“:”出发,第一个遍历到的字符为“{”,此后,设备按顺序进行遍历,其间依次遍历到了四个关键字符“"”,当遍历到第一个“}”时,所出现的关键字符都成对出现了,此时遍历结束。

在本实施例中,在结束遍历后,所述设备根据所述关键字符的位置,即可获取与待读取的键对应的值。例如,在本实施例中,键“key”对应的值为{"subkey":"subvalue"}。

在本实施例中,在获取键值对后,即可以将该键值对保存为oracle字符串,实现从json数据格式的oracle字符串转换为oracle字符串,此后,还可以进行删除该值的操作等。

优选地,还包括:

判断json数据是否满足json标准格式。

在本实施例中,为了提取与键相应的值,首先要判断json数据是否满足json标准格式。具体地,所述设备对所述json数据进行遍历,并判断遍历过程中的是否有key:value对,若有,则获取key:value对,并进一步判断所遍历到的关键字符“{}”与“[]”是否都成对出现并且位置相应,如果是,则说明json数据满足json标准格式,若否,则说明json数据不满足json标准格式,此时,退出后续的转换过程。

优选地,当所述json数据为json对象数组时,还包括:

根据关键字符“{”、“}”的对数,获取所述json对象数组的值的对象个数以及每个对象。

具体地,对于一个json对象数组,例如

此时,根据上述的转换方法,可以获得"array"对应的值为:

其中,根据遍历结果可以得到该值包括三对“{}”,即说明json对象数组的值的对象个数为3个,此外,还可根据“{}”的位置获取每个对象。

优选地,还包括:

合并json对象。

在本实施例中,由于已经根据“{}”的位置获取每个对象,因此可以将这些json对象进行合并。例如,可通过内置的合并函数或者方法实现对象的合并。

优选地,还包括:

读取oracle字符串;

获取oracle字符串的键及与键对应的值,并将键和值存储成json对象格式的字符串或者json数组格式的字符串。

在本实施例中,还可将oracle字符串转换为json格式的字符串。在转换时,首先直接读取oracle字符串,然后根据oracle的内置函数获取oracle字符串的键及与键对应的值,此后,根据json的格式要求,将键和值存储成json对象格式的字符串或者json数组格式的字符串,即可实现将oracle字符串转换为json格式的字符串。

优选地,还包括:

将oracle游标转换成json对象格式的字符串。

在本实施例中,具体地,oracle游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了,将游标放置到某行后,即可对该行数据进行操作,例如提取当前行的数据等。

在本实施例中,通过oracle游标可以提取当前行的数据,然后可以将当前行的数据根据json的格式要求转换成json对象格式的字符串。

综上所述,本发明实施例提供的oracle中实现json格式数据存取的方法,都是以oracle内置函数和数据结构为基础,以pl/sql技术编码,数据格式和转换流程简单,占有的oracle数据库资源很少,因而高效可用性,能应对互联网环境的高并发需求;本发明内部逻辑清晰简单,对不同的数据格式有不同的处理方法,具有稳定性、容错性;同时,本发明支持clob大对象数据格式,效率较优。

请参阅图2,本发明实施例还提供了一种oracle中实现json格式数据存取的装置,包括:

数据读取单元10,用于读取json数据及所述json数据的待读取的键;

第一索引单元20,用于在所述json数据中获取所述待读取的键的位置,标记为第一索引位置;

第二索引单元30,用于根据所述第一索引位置获取位于所述第一索引位置后的第一个标记字符“:”的位置,并标记为第二索引位置;

遍历单元40,用于对所述json数据的所述第二索引位置后的字符进行遍历,直至在遍历过程中检测到关键字符都成对出现;

值获取单元50,用于根据所述关键字符的位置,获取与待读取的键对应的值。

优选地,所述关键字符包括:“{”及与“{”构成一对的“}”,“[”及与“[”构成一对的“]”,“"”。

优选地,还包括:

json标准格式判断单元,用于判断json数据是否满足json标准格式。

优选地,还包括:

json对象获取单元,用于根据关键字符“{”、“}”的对数,获取所述json对象数组的值的对象个数以及每个对象。

优选地,还包括:

值删除单元,用于根据所述关键字符的位置及所述第二索引位置,删除与待读取的键对应的值。

优选地,还包括:

oracle字符串读取单元,用于读取oracle字符串;

转换单元,用于获取oracle字符串的键及与键对应的值,并将键和值存储成json对象格式的字符串或者json数组格式的字符串。

优选地,还包括:

oracle游标转换单元,用于将oracle游标转换成json对象格式的字符串。

本发明实施例提供的oracle中实现json格式数据存取的装置,都是以oracle内置函数和数据结构为基础,以pl/sql技术编码,数据格式和转换流程简单,占有的oracle数据库资源很少,因而高效可用性,能应对互联网环境的高并发需求;本发明内部逻辑清晰简单,对不同的数据格式有不同的处理方法,具有稳定性、容错性;同时,本发明支持clob大对象数据格式,效率较优。

本发明实施例还提供了一种oracle中实现json格式数据存取的设备。该实施例的设备包括:处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序。所述处理器执行所述计算机程序时实现上述各个实施例中的步骤,例如图1所示的步骤s10。或者,所述处理器执行所述计算机程序时实现上述各装置实施例中各单元的功能,例如图2所示的数据读取单元10。

示例性的,所述计算机程序可以被分割成一个或多个模块,所述一个或者多个模块被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在设备中的执行过程。

所述设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述设备可包括,但不仅限于,处理器、存储器、显示器。本领域技术人员可以理解,所述示意图仅仅是设备的示例,并不构成对设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述页面选择的终端设备还可以包括输入输出设备、网络接入设备、总线等。

所称处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述页面选择的终端设备的控制中心,利用各种接口和线路连接整个所述设备的各个部分。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述页面选择的终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、文字转换功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、文字消息数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

其中,所述设备集成的模块如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一个计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1