CN109508409A - 一种半结构化json数据自由解析适配方法 - Google Patents
一种半结构化json数据自由解析适配方法 Download PDFInfo
- Publication number
- CN109508409A CN109508409A CN201811236179.5A CN201811236179A CN109508409A CN 109508409 A CN109508409 A CN 109508409A CN 201811236179 A CN201811236179 A CN 201811236179A CN 109508409 A CN109508409 A CN 109508409A
- Authority
- CN
- China
- Prior art keywords
- data
- json
- routing
- json data
- semi
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种半结构化json数据自由解析适配方法,涉及计算机应用技术领域。该方法通过对原json数据中的数组、对象均进行拆分,并按照json数据结构为拆分后的数组、对象一一编写路由,用户根据需求,利用路由编写输出结构配置文件,最后读取该输出结构配置文件,即可获取json数据或结构化数据。与现有技术中通过编写代码提取数据的方式相比,对于用户而言,无需编码,省去了解析出错调试的时间。实现起来变得非常容易,无需专业要求,而且,采用本发明提供的方法,用户可以很随意的按业务需求将半结构化的数据转化成业务需要的结构化数据、半结构化Jsion数据。
Description
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种半结构化json数据自由解析适配方法。
背景技术
JSON(JacaScript Object Natation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯,这些特性使得JSON成为理想的数据交换语言。
但是,目前,一般需要通过编写代码的方式,从大量的半结构化json数据,提取其中的一部分,如果这些待提取的数据量也比较大,而且又没有什么规律性的话,则需要针对每个数据都编写对应的代码,所以,操作起来会费时费力,尤其是当企业具有很多部门,虽然每个部门需要的数据不同,但是,也可能不同的部门需要的某些数据相同,这就导致数据工程师可能需要对相同的数据,进行多次重复性的提取,即进行多次重复性的编写相同的代码,造成资源的浪费和工作效率的下降。而且,由于需要编写代码,就需要操作人员非常熟悉json数据的结构,因此,就无形中提高了对操作人员的专业要求。
发明内容
本发明的目的在于提供一种半结构化json数据自由解析适配方法,从而解决现有技术中存在的前述问题。
为了实现上述目的,本发明采用的技术方案如下:
一种半结构化json数据自由解析适配方法,包括如下步骤:
S1,批量获取同结构的json原始数据;
S2,将一条原json数据中的数组、对象均进行迭代拆分,直至拆分到每个元素,将拆分的子串以及元素进行标识ID作为路由ID,json数据中的每一段内容以及最终元素都有唯一的路由ID;
S3,用户根据需求,利用路由ID编写输出结构配置文件;
S4,根据用户编写的输出结构配置文件,获取配置文件中的路由ID对应的数据,组合拼凑输出需求的半结构化json数据或结构化数据。
优选地,S2中,所述路由ID以树结构的形式表示,该树结构中,树枝节点为json数据或json片段数据,叶子结点为最小粒度数据。
优选地,S2中,对于批量同结构json数据,相同位置的数据对应的路由ID相同。
优选地,S3中,用户根据需求,利用路由ID编写输出结构配置文件,具体包括如下步骤:
S301,用户获取所解析json的数据结构和待输出的数据结构;
S302,按照json数据结构确定需求的数据对应的路由ID;
S303,利用路由ID拼凑输出结构写入到输出结构配置文件。
优选地,S302具体为,将一条原json数据中的数组、对象均进行迭代拆分,直至拆分到每个元素,将拆分的子串以及元素进行标识ID作为路由ID,json数据中的每一段内容以及最终元素都有唯一的路由ID,对于批量同结构的json数据,相同位置的数据对应的路由ID相同。
优选地,S4中,所述组合输出json数据或结构化数据,包括批量json数据中一个对象或数组或一段json内容或某几个元素的内容。
本发明的有益效果是:本发明提供的半结构化json数据自由解析适配方法,通过对原json数据中的数组、对象均进行拆分,并按照json数据结构为拆分后的数组、对象一一编写路由,用户根据需求,利用路由编写输出结构配置文件,最后读取该输出结构配置文件,即可获取用户需求的json数据或结构化数据。与现有技术中通过编写代码提取数据的方式相比,对于用户而言,无需编码,省去了解析出错调试的时间。实现起来变得非常容易,对于操作人员无需很高的专业要求,能够极大的节省时间和经历,提高工作效率。而且,采用本发明提供的方法,用户可以很随意的按业务需求将半结构化的数据转化成业务需要的结构化数据、半结构化Jsion数据。
附图说明
图1是本发明提供的半结构化json数据自由解析适配方法流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明提供了一种半结构化json数据自由解析适配方法,包括如下步骤:
S1,批量获取同结构的json原始数据;
S2,将一条原json数据中的数组、对象均进行迭代拆分,直至拆分到每个元素,将拆分的子串以及元素进行标识ID作为路由ID,json数据中的每一段内容以及最终元素都有唯一的路由ID;
S3,用户根据需求,利用路由ID编写输出结构配置文件;
S4,根据用户编写的输出结构配置文件,获取配置文件中的路由ID对应的数据,组合拼凑输出需求的半结构化json数据或结构化数据。
采用上述方法,由于对于json数据所有的数组和对象均编写了路由,所以,在提取数据时,用户只需要通过路由编写简单的输出结构配置文件,就可以很快速的从成千上万条json数据中得到对应的数据,所以,容易实现,对于操作人员无需很高的专业要求,也能够极大的节省时间和经历,提高工作效率。
其中,S2中,所述路由ID可以以树结构的形式表示,该树结构中,树枝节点为json数据或json片段数据,叶子结点为最小粒度数据。
采用上述形式,即相当与将json数据中的内容和最终元素分别放置在大树的支杆和叶片上(具体理解可参见下文中的示例),并对每个支杆和叶片进行编号,每个支杆和叶片都有唯一对应的编号,则其对应的json数据中的内容和最终元素也都有唯一的编号,那么,用户在该大树上去查询json数据中的内容和最终元素时,只需要根据该唯一的编号即可找到,而无需再使用编程的语言。
S2中,批量同结构json数据,相同位置的数据对应的路由ID相同。
对于同一种json数据结构的数据,其形成的树结构相同,所以,其相同位置的数据对应的路由ID是相同的。
则对于批量的该类数据,用户只需要知道其中一条json数据的结构,则可以从批量的该类数据中,获取到所有的位于相同位置的数据。
S3中,用户根据需求,利用路由ID编写输出结构配置文件,具体包括如下步骤:
S301,用户获取所解析json的数据结构和待输出的数据结构;
S302,按照json数据结构确定需求的数据对应的路由ID;
S303,利用路由ID拼凑输出结构写入到输出结构配置文件。
S302具体为,将一条原json数据中的数组、对象均进行迭代拆分,直至拆分到每个元素,将拆分的子串以及元素进行标识ID作为路由ID,json数据中的每一段内容以及最终元素都有唯一的路由ID,对于批量同结构的json数据,相同位置的数据对应的路由ID相同。
S4中,所述组合输出json数据或结构化数据,包括批量json数据中一个对象或数组或一段json内容或某几个元素的内容。
具体实施例:
步骤一,获取如下示例的原json数据,如下示例为其中的一条json数据,在实际应用中,这种示例的json数据会有成千上万条:
{"animals":{"dog":[{"name":"Rufus[ss]","age":15},{"name":"Marty","age":null}],"dog1":[{"name1":"Rufus1","age":15},{"name1":"Marty1","age":null}]}}。
步骤二,将步骤一中的一条原json数据中的数组、对象均进行迭代拆分,直至拆分到每个元素,将拆分的子串以及元素进行标识ID作为路由ID,json数据中的每一段内容以及最终元素都有唯一的路由ID,并将所有的路由以树结构的形式进行表示,结果如下:
(1,{},0,167,{"animals":{"dog":[{"name":"Rufus[ss]","age":15},{"name":"Marty","age":null}],"dog1":[{"name1":"Rufus1","age":15},{"name1":"Marty1","age":null}]}})
(1-1,{},13,166,{"dog":[{"name":"Rufus[ss]","age":15},{"name":"Marty","age":null}],"dog1":[{"name1":"Rufus1","age":15},{"name1":"Marty1","age":null}]})
(1-1-2,[],99,164,[{"name1":"Rufus1","age":15},{"name1":"Marty1","age":null}])
(1-1-2-2,{},132,162,{"name1":"Marty1","age":null})
(1-1-2-1,{},101,130,{"name1":"Rufus1","age":15})
(1-1-1,[],23,88,[{"name":"Rufus[ss]","age":15},{"name":"Marty","age":null}])
(1-1-1-2,{},58,86,{"name":"Marty","age":null})
(1-1-1-1,{},25,56,{"name":"Rufus[ss]","age":15})
其中,1,1-1,1-1-2,1-1-2-2,1-1-2-1,1-1-1,1-1-1-2,1-1-1-1,就是按照json数据的结构为原json数据中的对象、数组等编写的枝干节点路由。其后的数据为该路由对应的数据,比如,1-1-1-1路由对应的数据为{"name":"Rufus[ss]","age":15}。同时,该数据位于该条json数据的25-56的位置处。所以,在实际应用过程中,为了在后续提取数据时,能够更加准确的定位,可以在编写路由的同时,将路由对应的数据所处的位置同时给出。
对于以上的枝干节点路由,继续编写叶子节点路由。
比如,对于以下的枝干节点:
(1-1-1-1,{"name1":"Marty1","age":null})
(1-1-2-2,{"name":"Rufus[ss]","age":15})
(1-1,{"dog":[{"name":"Rufus[ss]","age":15},{"name":"Marty","age":nu
ll}],"dog1":[{"name1":"Rufus1","age":15},{"name1":"Marty1","age":nu
ll}]})
可以按照如下形式编写叶子节点路由:
(1-1-2-2:map:@age,15)
(1-1-2-2:map:@name,"Rufus[ss]")
(1-1-1-1:map:@age,"null")
从上述结果中,可以看出,每个节点(枝干节点和叶子节点)均包括路由和对应的数据,所以,在用户需要从一条json数据中获取对象或数组,或者从成千上万条json数据中获取相同位置的对象或数组时,只需要提供需要获取的对象或数组的路由(位置),即可获取到该路由对应的数据。
在实际应用过程中,对于成千上万条json数据,只需要找到该需求的数据在一条json数据中的路由(位置),即可获取到成千上万条json数据中的该位置的数据,从而将半结构化的json数据,转化为结构化的数据,而且能够实现批量的数据提取。
步骤三,用户根据需求,利用路由ID编写输出结构配置文件。
例如,在该条json数据中:
{"animals":{"dog":[{"name":"Rufus[ss]","age":15},{"name":"Marty","age":null}],"dog1":[{"name1":"Rufus1","age":15},{"name1":"Marty1","age":null}]}},
或者与该条json数据结构相同的成千上万条json数据,用户想从该条json数据,或者与该条json数据结构相同的成千上万条json数据中获取age,则可编写如下结构的输出结构配置文件:1-1-1-1:map:@age,1-1-1-2:map:@age,1-1-2-1:map:@age,1-1-2-2:map:@age。
如果用户想从json数据中获取age和name两类数据,则可编写如下结构的输出结构配置文件:1-1-1-1:map:@age,1-1-1-2:map:@age,1-1-2-1:map:@age,1-1-2-2:map:@age,1-1-1-1:map:@name,1-1-1-2:map:@name,1-1-2-1:map:@name,1-1-2-2:map:@name。
步骤四,根据用户的输出结构配置文件,获取配置文件中的路由对应的数据,组合输出json数据或结构化数据。
根据步骤三中用户编写的输出结构配置文件,比如,1-1-1-1:map:@age,1-1-1-2:map:@age,1-1-2-1:map:@age,1-1-2-2:map:@age,读取并输出每个路由对应的数据:15,null,15,null。
可见,采用本发明提供的方法,用户只需要通过路由编写简单的输出结构配置文件,就可以很快速的从成千上万条json数据中得到对应的数据,而现有技术中,还需要经过编写代码的方式,进行数据的提取,相对于编写代码,对于用户而言,只是简单的输入路由,就显得非常容易了,所以,对于操作人员无需很高的专业要求,也能够极大的节省时间和经历,提高工作效率。而且,采用本发明提供的方法,可以将半结构化的数据转化成结构化数据。同时,可以简单的实现不同的json数据对象或数组的自由组合,提取出用户需要的数据。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:本发明提供的半结构化json数据自由解析适配方法,通过对原json数据中的数组、对象均进行拆分,并按照原json数据结构为拆分后的数组、对象一一编写路由,用户根据需求,利用路由编写输出结构配置文件,最后读取该输出结构配置文件,即可获取用户需求的json数据。与现有技术中通过编写代码提取数据的方式相比,对于用户而言,实现起来变得非常容易,对于操作人员无需很高的专业要求,能够极大的节省时间和经历,提高工作效率。而且,采用本发明提供的方法,用户可以很随意的按业务需求将半结构化的数据转化成业务需要的结构化数据、半结构化Jsion数据。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
Claims (6)
1.一种半结构化json数据自由解析适配方法,其特征在于,包括如下步骤:
S1,批量获取同结构的json原始数据;
S2,将一条原json数据中的数组、对象均进行迭代拆分,直至拆分到每个元素,将拆分的子串以及元素进行标识ID作为路由ID,json数据中的每一段内容以及最终元素都有唯一的路由ID;
S3,用户根据需求,利用路由ID编写输出结构配置文件;
S4,根据用户编写的输出结构配置文件,获取配置文件中的路由ID对应的数据,组合拼凑输出需求的半结构化json数据或结构化数据。
2.根据权利要求1所述的半结构化json数据自由解析适配方法,其特征在于,S2中,所述路由ID以树结构的形式表示,该树结构中,树枝节点为json数据或json片段数据,叶子结点为最小粒度数据。
3.根据权利要求1所述的半结构化json数据自由解析适配方法,其特征在于,S2中,批量同结构json数据,相同位置的数据对应的路由ID相同。
4.根据权利要求1所述的半结构化json数据自由解析适配方法,其特征在于,S3中,用户根据需求,利用路由ID编写输出结构配置文件,具体包括如下步骤:
S301,用户获取所解析json的数据结构和待输出的数据结构;
S302,按照json数据结构确定需求的数据对应的路由ID;
S303,利用路由ID拼凑输出结构写入到输出结构配置文件。
5.根据权利要求4所述的半结构化json数据自由解析适配方法,其特征在于,S302具体为,将一条原json数据中的数组、对象均进行迭代拆分,直至拆分到每个元素,将拆分的子串以及元素进行标识ID作为路由ID,json数据中的每一段内容以及最终元素都有唯一的路由ID,对于批量同结构的json数据,相同位置的数据对应的路由ID相同。
6.根据权利要求1所述的半结构化json数据自由解析适配方法,其特征在于,S4中,所述组合输出json数据或结构化数据,包括批量json数据中一个对象或数组或一段json内容或某几个元素的内容。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811236179.5A CN109508409A (zh) | 2018-10-23 | 2018-10-23 | 一种半结构化json数据自由解析适配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811236179.5A CN109508409A (zh) | 2018-10-23 | 2018-10-23 | 一种半结构化json数据自由解析适配方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109508409A true CN109508409A (zh) | 2019-03-22 |
Family
ID=65745879
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811236179.5A Pending CN109508409A (zh) | 2018-10-23 | 2018-10-23 | 一种半结构化json数据自由解析适配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109508409A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116610679A (zh) * | 2023-07-17 | 2023-08-18 | 金锐同创(北京)科技股份有限公司 | json数据的解析方法、装置、计算机设备及介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100211572A1 (en) * | 2009-02-13 | 2010-08-19 | International Business Machines Corporation | Indexing and searching json objects |
CN105849726A (zh) * | 2013-11-08 | 2016-08-10 | 甲骨文国际公司 | 用于高效地支持通过分层标记数据的即席查询的通用索引 |
CN106021523A (zh) * | 2016-05-24 | 2016-10-12 | 北京交通大学 | 基于json的数据仓库存储及查询方法 |
CN106934011A (zh) * | 2017-03-09 | 2017-07-07 | 济南浪潮高新科技投资发展有限公司 | 一种json数据的结构化解析方法及装置 |
CN107092656A (zh) * | 2017-03-23 | 2017-08-25 | 中国科学院计算技术研究所 | 一种树状结构数据处理方法及系统 |
CN108008936A (zh) * | 2017-12-04 | 2018-05-08 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置及电子设备 |
CN108427664A (zh) * | 2018-02-22 | 2018-08-21 | 阿里巴巴集团控股有限公司 | 一种文档解析方法和装置 |
-
2018
- 2018-10-23 CN CN201811236179.5A patent/CN109508409A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100211572A1 (en) * | 2009-02-13 | 2010-08-19 | International Business Machines Corporation | Indexing and searching json objects |
CN105849726A (zh) * | 2013-11-08 | 2016-08-10 | 甲骨文国际公司 | 用于高效地支持通过分层标记数据的即席查询的通用索引 |
CN106021523A (zh) * | 2016-05-24 | 2016-10-12 | 北京交通大学 | 基于json的数据仓库存储及查询方法 |
CN106934011A (zh) * | 2017-03-09 | 2017-07-07 | 济南浪潮高新科技投资发展有限公司 | 一种json数据的结构化解析方法及装置 |
CN107092656A (zh) * | 2017-03-23 | 2017-08-25 | 中国科学院计算技术研究所 | 一种树状结构数据处理方法及系统 |
CN108008936A (zh) * | 2017-12-04 | 2018-05-08 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置及电子设备 |
CN108427664A (zh) * | 2018-02-22 | 2018-08-21 | 阿里巴巴集团控股有限公司 | 一种文档解析方法和装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116610679A (zh) * | 2023-07-17 | 2023-08-18 | 金锐同创(北京)科技股份有限公司 | json数据的解析方法、装置、计算机设备及介质 |
CN116610679B (zh) * | 2023-07-17 | 2023-10-17 | 金锐同创(北京)科技股份有限公司 | json数据的解析方法、装置、计算机设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106528129B (zh) | 一种Web应用界面生成系统及方法 | |
CN106709356A (zh) | 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法 | |
KR101569984B1 (ko) | 웹 스크래핑 추출 데이터 설정 방법 | |
JP6132698B2 (ja) | 表形式多次元データ変換方法及び装置 | |
CN107273122A (zh) | 基于解耦机制的可迭代组建业务系统的方法及其终端 | |
CN101937427A (zh) | 一种基于浏览器的内容编辑及发布的系统及方法 | |
CN109088908A (zh) | 一种面向网络的分布式通用数据采集方法和系统 | |
CN107153535A (zh) | 一种操作ElasticSearch的方法及装置 | |
CN103020318A (zh) | 一种对数据库中数据库表维护的方法 | |
CN109508409A (zh) | 一种半结构化json数据自由解析适配方法 | |
CN103593182A (zh) | 一种采用聚类方式进行软件重构的方法 | |
US20140075416A1 (en) | Graphical conversion between test program languages | |
CN105653513B (zh) | 一种基于猪场管理的表单录入方法及系统 | |
CN109660602A (zh) | 数据增量传输方法及装置 | |
US20050177788A1 (en) | Text to XML transformer and method | |
CN109144878A (zh) | 基于路径差异的代码测试方法 | |
WO2013154055A1 (ja) | 構造解析装置及びプログラム | |
CN105786932B (zh) | 医疗系统中临床业务的查询方法及查询装置 | |
JP2013218627A (ja) | 構造化文書からの情報抽出方法、装置、及びプログラム | |
JP6175306B2 (ja) | 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体 | |
CN106649118A (zh) | 一种基于AST的Java代码SSA单路径的生成方法 | |
KR101765324B1 (ko) | Sql과 다이어그램을 이용하는 소스코드 생성 장치 및 그의 처리 방법 | |
Kamiya | Variation analysis of context-sharing identifiers with code clones | |
WO2014061305A1 (ja) | エントリ挿入装置、方法、及びプログラム | |
CN105431817B (zh) | 源程序比较装置以及存储装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190322 |
|
RJ01 | Rejection of invention patent application after publication |