一种将结构化数据转化为非结构化数据的方法及系统转让专利

申请号 : CN201811244279.2

文献号 : CN109344193B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 翁星晨朱晓峰

申请人 : 中国银行股份有限公司

摘要 :

本申请公开了一种将结构化数据转化为非结构化数据的方法及系统,方法包括:配置JSON模板,解析JSON模板到结构体数组,根据结构体数组读取数组源,得到JSON文件。本申请能够高效准确的完成结构化数据到非结构化数据格式的转换。

权利要求 :

1.一种将结构化数据转化为非结构化数据的方法,其特征在于,所述方法包括:配置JSON模板;

解析所述JSON模板到结构体数组;

根据所述结构体数组读取数组源,基于生成JSON文件的算法流程得到JSON文件;

其中,所述生成JSON文件的算法流程包括:

A1:输出json函数,然后执行A2;

A2:找到第一个节点结构体数组的表名和标签名,遍历所有主表行,然后执行A3;

A3:判断主表列所有行数据是否处理完,若是,执行A15,若否,执行A4;

A4:从第j个节点开始初始化json行数据,其中,j=2,然后执行A5;

A5:判断j是否小于总标签个数,所述总标签个数为结构体数组的元素个数,若是,执行A6,若否,执行A9;

A6:判断深度为1的节点类型,若所述节点类型为叶节点,执行A7,若所述节点类型为中间节点,执行A11;

A7:调用函数取得标签对应的值并赋值给temp,然后执行A8;

A8:拼接json行数据,并将j=j+1,然后执行A5;

A9:一行jsonline处理完毕,去掉末位的“,”,并加上“;”以及换行符,然后执行A10;

A10:写入一行jsonline到文件中,然后执行A3;

A11:判断中间节点value类型,若中间节点value类型为OA类型,执行A12,若中间节点value类型为O类型,执行A14;

A12:判断OA类型有没有嵌套对象,若嵌套则报错,若没有则执行A13;

A13:调用函数得到OA类型的值并赋值给temp,然后执行A8;

A14:调用函数得到标签值并赋值给temp,然后执行A8;

A15:JSON文件生成结束。

2.根据权利要求1所述的方法,其特征在于,所述解析所述JSON模板到结构体数组包括:通过递归函数解析所述JSON模板到结构体数组。

3.根据权利要求2所述的方法,其特征在于,所述根据所述结构体数组读取数组源,基于生成JSON文件的算法流程得到JSON文件包括:根据所述结构体数组从表格中读取数据,基于生成JSON文件的算法流程生成JSON文件。

4.根据权利要求3所述的方法,其特征在于,所述JSON模板中的第一个节点作为主索引,所述主索引对应主表的主字段,所述主表中的每一行对应JSON文件的每一行。

5.根据权利要求3所述的方法,其特征在于,所述根据所述结构体数组读取数组源,基于生成JSON文件的算法流程得到JSON文件包括:根据所述结构体数组从数据库的二维表格中读取数据,基于生成JSON文件的算法流程生成JSON文件。

6.一种将结构化数据转化为非结构化数据的系统,其特征在于,包括:配置模块,用于配置JSON模板;

解析模块,用于解析所述JSON模板到结构体数组;

转化模块,用于根据所述结构体数组读取数组源,基于生成JSON文件的算法流程得到JSON文件,其中,所述生成JSON文件的算法流程包括:A1:输出json函数,然后执行A2;A2:找到第一个节点结构体数组的表名和标签名,遍历所有主表行,然后执行A3;A3:判断主表列所有行数据是否处理完,若是,执行A15,若否,执行A4;A4:从第j个节点开始初始化json行数据,其中,j=2,然后执行A5;A5:判断j是否小于总标签个数,所述总标签个数为结构体数组的元素个数,若是,执行A6,若否,执行A9;A6:判断深度为1的节点类型,若所述节点类型为叶节点,执行A7,若所述节点类型为中间节点,执行A11;A7:调用函数取得标签对应的值并赋值给temp,然后执行A8;A8:拼接json行数据,并将j=j+1,然后执行A5;A9:一行jsonline处理完毕,去掉末位的“,”,并加上“;”以及换行符,然后执行A10;A10:写入一行jsonline到文件中,然后执行A3;A11:判断中间节点value类型,若中间节点value类型为OA类型,执行A12,若中间节点value类型为O类型,执行A14;A12:判断OA类型有没有嵌套对象,若嵌套则报错,若没有则执行A13;A13:调用函数得到OA类型的值并赋值给temp,然后执行A8;A14:调用函数得到标签值并赋值给temp,然后执行A8;A15:JSON文件生成结束。

7.根据权利要求6所述的系统,其特征在于,所述解析模块具体用于:通过递归函数解析所述JSON模板到结构体数组。

8.根据权利要求7所述的系统,其特征在于,所述转化模块具体用于:根据所述结构体数组从表格中读取数据,基于生成JSON文件的算法流程生成JSON文件。

9.根据权利要求8所述的系统,其特征在于,所述JSON模板中的第一个节点作为主索引,所述主索引对应主表的主字段,所述主表中的每一行对应JSON文件的每一行。

10.根据权利要求7所述的系统,其特征在于,所述转化模块具体用于:根据所述结构体数组从数据库的二维表格中读取数据,基于生成JSON文件的算法流程生成JSON文件。

说明书 :

一种将结构化数据转化为非结构化数据的方法及系统

技术领域

[0001] 本申请涉及数据转化技术领域,尤其涉及一种将结构化数据转化为非结构化数据的方法及系统。

背景技术

[0002] 目前,在使用基于分布式文件存储的数据库等非关系型数据库的开发项目中,往往涉及到铺底数据或者码表的导入,需要将结构化数据,比如说表格,转换成非关系型数据库支出的格式,比如说JSON(JavaScript Object Notation,JS对象简谱,一种轻量级的数据交换格式)。目前通常使用的方法是手工转换,复制粘贴的重复工作效率十分低下,并且容易出错。并且如果使用传统的转换非结构化数据方法,大部分都是与JSON报文强耦合,需要修改JSON格式的时候还需要多次修改代码。
[0003] 因此,如何高效准确的完成结构化数据到非结构化数据格式的转换,是一项亟待解决的问题。

发明内容

[0004] 有鉴于此,本申请提供了一种将结构化数据转化为非结构化数据的方法,能够高效准确的完成结构化数据到非结构化数据格式的转换。
[0005] 本申请提供了一种将结构化数据转化为非结构化数据的方法,所述方法包括:
[0006] 配置JSON模板;
[0007] 解析所述JSON模板到结构体数组;
[0008] 根据所述结构体数组读取数组源,得到JSON文件。
[0009] 优选地,所述解析所述JSON模板到结构体数组包括:
[0010] 通过递归函数解析所述JSON模板到结构体数组。
[0011] 优选地,所述根据所述结构体数组读取数组源,得到JSON文件包括:
[0012] 根据所述结构体数组从表格中读取数据,生成JSON文件。
[0013] 优选地,所述JSON模板中的第一个节点作为主索引,所述主索引对应主表的主字段,所述主表中的每一行对应JSON文件的每一行。
[0014] 优选地,所述根据所述结构体数组读取数组源,得到JSON文件包括:
[0015] 根据所述结构体数组从数据库中读取数据,生成JSON文件。
[0016] 一种将结构化数据转化为非结构化数据的系统,包括:
[0017] 配置模块,用于配置JSON模板;
[0018] 解析模块,用于解析所述JSON模板到结构体数组;
[0019] 转化模块,用于根据所述结构体数组读取数组源,得到JSON文件。
[0020] 优选地,所述解析模块具体用于:
[0021] 通过递归函数解析所述JSON模板到结构体数组。
[0022] 优选地,所述转化模块具体用于:
[0023] 根据所述结构体数组从表格中读取数据,生成JSON文件。
[0024] 优选地,所述JSON模板中的第一个节点作为主索引,所述主索引对应主表的主字段,所述主表中的每一行对应JSON文件的每一行。
[0025] 优选地,所述转化模块具体用于:
[0026] 根据所述结构体数组从数据库中读取数据,生成JSON文件。
[0027] 综上所述,本申请公开了一种将结构化数据转化为非结构化数据的方法,当需要将结构化数据转化为非结构化数据时,首先配置JSON模板,然后解析JSON模板到结构体数组,最后根据结构体数组读取数组源,得到JSON文件。本申请能够高效准确的完成结构化数据到非结构化数据格式的转换。

附图说明

[0028] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0029] 图1为本申请公开的一种将结构化数据转化为非结构化数据的方法实施例1的方法流程图;
[0030] 图2为本申请公开的一种将结构化数据转化为非结构化数据的方法实施例2的方法流程图;
[0031] 图3为本申请公开的一种将结构化数据转化为非结构化数据的方法实施例3的方法流程图;
[0032] 图4为本申请公开的生成JSON文件的算法流程图;
[0033] 图5为本申请公开的一种将结构化数据转化为非结构化数据的系统实施例1的结构示意图;
[0034] 图6为本申请公开的一种将结构化数据转化为非结构化数据的系实施例2的结构示意图;
[0035] 图7为本申请公开的一种将结构化数据转化为非结构化数据的系实施例3的结构示意图。

具体实施方式

[0036] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0037] 如图1所示,为申请提供的一种将结构化数据转化为非结构化数据的方法实施例1的方法流程图,所述方法可以包括以下步骤:
[0038] S101、配置JSON模板;
[0039] 结构化数据,即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据;结构定义不易改变,数据定长。非结构化数据,即不方便用数据库二维逻辑表来表现的数据。其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成。当需要将结构化数据转化为非结构化数据时,首先定义需要的JSON模板。
[0040] S102、解析JSON模板到结构体数组;
[0041] 当定义好需要的JSON模板后,进一步进行解析,解析JSON模板到结构体数组。
[0042] S103、根据结构体数组读取数组源,得到JSON文件。
[0043] 然后根据得到的结构体数组读取到数组源,即读取到需要进行转化的数据,通过转化得到JSON文件。
[0044] 综上所述,在上述实施例中,当需要将结构化数据转化为非结构化数据时,首先配置JSON模板,然后解析JSON模板到结构体数组,最后根据结构体数组读取数组源,得到JSON文件。本申请能够高效准确的完成结构化数据到非结构化数据格式的转换。
[0045] 如图2所示,为申请提供的一种将结构化数据转化为非结构化数据的方法实施例2的方法流程图,所述方法可以包括以下步骤:
[0046] S201、配置JSON模板;
[0047] 结构化数据,即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据;结构定义不易改变,数据定长。非结构化数据,即不方便用数据库二维逻辑表来表现的数据。其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成。当需要将结构化数据转化为非结构化数据时,首先定义需要的JSON模板。
[0048] S202、解析JSON模板到结构体数组;
[0049] 当定义好需要的JSON模板后,进一步进行解析,解析JSON模板到结构体数组。
[0050] S203、根据结构体数组从数据库中读取数据,生成JSON文件。
[0051] 然后根据得到的结构体数组从数据库中读取到数组源,即读取到需要进行转化的数据,通过转化得到JSON文件。
[0052] 综上所述,在上述实施例中,当需要将结构化数据转化为非结构化数据时,首先配置JSON模板,然后解析JSON模板到结构体数组,最后根据结构体数组从数据库中读取数据,得到JSON文件。本申请能够高效准确的完成结构化数据到非结构化数据格式的转换。
[0053] 如图3所示,为申请提供的一种将结构化数据转化为非结构化数据的方法实施例3的方法流程图,所述方法可以包括以下步骤:
[0054] S301、配置JSON模板;
[0055] 结构化数据,即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据;结构定义不易改变,数据定长。非结构化数据,即不方便用数据库二维逻辑表来表现的数据。其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成。当需要将结构化数据转化为非结构化数据时,首先定义需要的JSON模板。
[0056] 形如(以excel作为数据源为例):
[0057] {"classNm":"支出(主表)[3]","classifyId":"支出(主表)[4]","isShow":"支出(主表)[5]","keyword":["关键字[2]"],"title":"支出(主表)[2]","tranCat":"支出(主表)[1]","mcc":[{"mccName":"MCC[1]","code":"MCC[2]"}],"tranTypes":[{"trancode":"交易类型[1]","tranDesc":"交易类型[2]","editFlag":"交易类型[3]"}]}[0058] 其中,标签对应的值是:表名[列号],表示该标签的数据来源位置。
[0059] S302、通过递归函数解析JSON模板到结构体数组;
[0060] 当定义好需要的JSON模板后,进一步通过递归函数解析JSON模板到结构体数组:
[0061] 结构体数组定义为:
[0062] Public Type jsonspot
[0063] spotno As String'节点编号,1,2,3...N
[0064] spotype As String'节点类型:M:.中间节点middle L:叶子节点leaf[0065] spotdepth As String'节点层级:1-第一层,2-第二层....
[0066] spotlable As String'节点标签值,对应json元素标签值
[0067] parentspot As String'父节点编号:0:根节点,1:1号节点......[0068] sheetname As String'叶节点使用:节点所在的sheet名,或者是table名[0069] columeno As String'叶节点使用:节点所在的列名,或者是colunm名[0070] extrakeycolumeno As String'叶节点使用:在叶节点所在的sheet中,主标签所在列
[0071] spotvaluetype As String'节点值类型:S:字符N:数值SA:字符数组[0072] O:对象NA:数值数组OA:对象数组
[0073] End Type
[0074] 用上面模板的例子:递归解析模板得到的结构体数据的简约结构如下表所示:
[0075]"classNm"  
"classifyId"  
"merch"  
"keyword"  
"title"  
"tranCat"  
″mcc″ "mccName"
  "code"
"tranTypes" "trancode"
  "editFlag"
[0076] 第一列是第一层,第二列是第二层,以此类推。同一行中前面列是后面列的父节点。
[0077] 完整结构为:
[0078] 用竖线分隔,格式是:节点编号|标签名|层级|节点类型(L/M)|节点值类型|父节点编号|所在sheet名|所在列名|主标签所在列;
[0079]
[0080]
[0081] S303、根据结构体数组从表格中读取数据,生成JSON文件。
[0082] 然后根据得到的结构体数组从数据库中读取到数组源,即读取到需要进行转化的数据,通过转化得到JSON文件。
[0083] 以JSON模板的第一个节点作为主索引,这个主索引对应主表的主字段,主表中的每一行对应JSON文件的每一行。其他表都有一个列与这个主索引对应。
[0084] 所有的表中的有效列都有标签名标注。
[0085] 具体的,生成JSON文件的算法流程如图4所示。
[0086] 综上所述,本申请使用简单,只需要简单配置好JSON模板,一键就能生成需要的JSON文件;处理效率高,指定好需要生成的JSON格式和数据来源,贴上需要处理的表格数据,只需要几秒就能处理好,比手工转换节省很多时间;避免了人工处理错误率高的问题,正确配置格式后不会发生操作上的错误;可以灵活配置JSON模板,适应不同的使用场景。
[0087] 如图5所示,为申请提供的一种将结构化数据转化为非结构化数据的系统实施例1的结构示意图,所述系统可以包括:
[0088] 配置模块401,用于配置JSON模板;
[0089] 结构化数据,即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据;结构定义不易改变,数据定长。非结构化数据,即不方便用数据库二维逻辑表来表现的数据。其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成。当需要将结构化数据转化为非结构化数据时,首先定义需要的JSON模板。
[0090] 解析模块402,用于解析JSON模板到结构体数组;
[0091] 当定义好需要的JSON模板后,进一步进行解析,解析JSON模板到结构体数组。
[0092] 转化模块403,用于根据结构体数组读取数组源,得到JSON文件。
[0093] 然后根据得到的结构体数组读取到数组源,即读取到需要进行转化的数据,通过转化得到JSON文件。
[0094] 综上所述,在上述实施例中,当需要将结构化数据转化为非结构化数据时,首先配置JSON模板,然后解析JSON模板到结构体数组,最后根据结构体数组读取数组源,得到JSON文件。本申请能够高效准确的完成结构化数据到非结构化数据格式的转换。
[0095] 如图6所示,为申请提供的一种将结构化数据转化为非结构化数据的系统实施例2的结构示意图,所述系统可以包括:
[0096] 配置模块501,用于配置JSON模板;
[0097] 结构化数据,即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据;结构定义不易改变,数据定长。非结构化数据,即不方便用数据库二维逻辑表来表现的数据。其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成。当需要将结构化数据转化为非结构化数据时,首先定义需要的JSON模板。
[0098] 解析模块502,用于解析JSON模板到结构体数组;
[0099] 当定义好需要的JSON模板后,进一步进行解析,解析JSON模板到结构体数组。
[0100] 转化模块503,用于根据结构体数组从数据库中读取数据,生成JSON文件。
[0101] 然后根据得到的结构体数组从数据库中读取到数组源,即读取到需要进行转化的数据,通过转化得到JSON文件。
[0102] 综上所述,在上述实施例中,当需要将结构化数据转化为非结构化数据时,首先配置JSON模板,然后解析JSON模板到结构体数组,最后根据结构体数组从数据库中读取数据,得到JSON文件。本申请能够高效准确的完成结构化数据到非结构化数据格式的转换。
[0103] 如图7所示,为申请提供的一种将结构化数据转化为非结构化数据的系统实施例3的结构示意图,所述系统可以包括:
[0104] 配置模块601,用于配置JSON模板;
[0105] 结构化数据,即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据;结构定义不易改变,数据定长。非结构化数据,即不方便用数据库二维逻辑表来表现的数据。其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成。当需要将结构化数据转化为非结构化数据时,首先定义需要的JSON模板。
[0106] 形如(以excel作为数据源为例):
[0107] {"classNm":"支出(主表)[3]","classifyId":"支出(主表)[4]","isShow":"支出(主表)[5]","keyword":["关键字[2]"],"title":"支出(主表)[2]","tranCat":"支出(主表)[1]","mcc":[{"mccName":"MCC[1]","code":"MCC[2]"}],"tranTypes":[{"tranco de":"交易类型[1]","tranDesc":"交易类型[2]","editFlag":"交易类型[3]"}]}[0108] 其中,标签对应的值是:表名[列号],表示该标签的数据来源位置。
[0109] 解析模块602,用于通过递归函数解析JSON模板到结构体数组;
[0110] 当定义好需要的JSON模板后,进一步通过递归函数解析JSON模板到结构体数组:
[0111] 结构体数组定义为:
[0112] Public Type jsonspot
[0113] spotno As String'节点编号,1,2,3...N
[0114] spotype As String'节点类型:M:.中间节点middle L:叶子节点leaf[0115] spotdepth As String'节点层级:1-第一层,2-第二层....
[0116] spotlable As String'节点标签值,对应json元素标签值
[0117] parentspot As String'父节点编号:0:根节点,1:1号节点......[0118] sheetname As String'叶节点使用:节点所在的sheet名,或者是table名[0119] columeno As String'叶节点使用:节点所在的列名,或者是colunm名[0120] extrakeycolumeno As String'叶节点使用:在叶节点所在的sheet中,主标签所在列
[0121] spotvaluetype As String'节点值类型:S:字符N:数值SA:字符数组[0122] O:对象NA:数值数组OA:对象数组
[0123] End Type
[0124] 用上面模板的例子:递归解析模板得到的结构体数据的简约结构如下表所示:
[0125] "classNm"  "classifyId"  
"merch"  
"keyword"  
"title"  
"tranCat"  
″mcc″ "mccName"
  "code"
"tranTypes" "trancode"
  "editFlag"
[0126] 第一列是第一层,第二列是第二层,以此类推。同一行中前面列是后面列的父节点。
[0127] 完整结构为:
[0128] 用竖线分隔,格式是:节点编号|标签名|层级|节点类型(L/M)|节点值类型|父节点编号|所在sheet名|所在列名|主标签所在列;
[0129]
[0130]
[0131] 转化模块603,用于根据结构体数组从表格中读取数据,生成JSON文件。
[0132] 然后根据得到的结构体数组从数据库中读取到数组源,即读取到需要进行转化的数据,通过转化得到JSON文件。
[0133] 以JSON模板的第一个节点作为主索引,这个主索引对应主表的主字段,主表中的每一行对应JSON文件的每一行。其他表都有一个列与这个主索引对应。
[0134] 所有的表中的有效列都有标签名标注。
[0135] 具体的,生成JSON文件的算法流程如图4所示。
[0136] 综上所述,本申请使用简单,只需要简单配置好JSON模板,一键就能生成需要的JSON文件;处理效率高,指定好需要生成的JSON格式和数据来源,贴上需要处理的表格数据,只需要几秒就能处理好,比手工转换节省很多时间;避免了人工处理错误率高的问题,正确配置格式后不会发生操作上的错误;可以灵活配置JSON模板,适应不同的使用场景。
[0137] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0138] 专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0139] 结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
[0140] 对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。