一种业务对象的数据抽取方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种业务对象的数据抽取方法及装置。
背景技术
随着大数据时代的到来,数据分析,数据挖掘等课题得到了越来越多的关注,但无论哪个课题,都需要先从业务对象中进行数据抽取,有了抽取到的数据才能够进行分析、挖掘等。数据抽取就是从业务对象源数据中抽取属性名称对应的属性值的过程,比如,想要分析某个业务对象(用户)的兴趣,就需要抽取该用户中包含的个人资料、历史行为等数据。
现有技术,实现对业务对象源数据进行抽取的方法可以先对源数据进行json(JavaScript Object Notation)格式化,再获取格式化后的数据。json是一种轻量级的数据交换格式,并且采用了类似于C语言(包括C、C++、C#、Java、JavaScript、Perl、Python等)家族的一些习惯,所以易于程序解析和生成。比如,应用程序A内有业务对象源数据,如果应用程序B需要这些源数据,就可以先用json化工具对业务对象源数据进行json格式化,再获取格式化后的数据,从而达到抽取的目的。
然而,现有技术在抽取过程中会将一个业务对象中包含的源数据全部进行json格式化,也就是说现有技术会抽取到全部的数据。如果仅需要抽取源数据中的部分数据,是无法做到的。
发明内容
本申请实施例提供一种业务对象的数据抽取方法,用于提供一种可以按需抽取数据的方法。
本申请实施例提供一种业务对象的数据抽取装置,用于提供一种可以按需抽取数据的方法。
本申请实施例采用下述技术方案:
一种业务对象的数据抽取方法,包括:
接收变量表达式,所述变量表达式是针对业务对象中需要进行抽取的属性名称的表达;
根据变量表达式建立变量表达式树,所述变量表达式树中的每个节点对应所述需要进行抽取的属性名称;
当接收到所述业务对象的源数据后,调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取所述需要进行抽取的属性名称对应的属性值。
优选地,调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取所述需要进行抽取的属性名称对应的属性值,包括:当需要抽取的属性名称对应的节点在所述变量表达式树中为叶子节点时,抽取所述叶子节点对应的属性名称的属性值。
优选地,调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取所述需要进行抽取的属性名称对应的属性值,包括:当需要抽取的属性名称对应的节点在所述变量表达式树中为包含数据集合的叶子节点,建立叶子节点数据表;抽取所述叶子节点对应的属性名称的所有属性值;将所述所有属性值中的每一个存入所述叶子节点数据表中。
优选地,调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取所述需要进行抽取的属性名称对应的属性值,包括:当需要抽取的属性名称对应的节点在所述变量表达式树中为中间节点时,查找所述中间节点下的子节点;调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取所述子节点对应的属性名称的属性值。
优选地,调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取所述需要进行抽取的属性名称对应的属性值,包括:当需要抽取的属性名称对应的节点在所述变量表达式树中为包含数据集合的中间节点时,建立中间节点数据表;抽取所述中间节点对应的属性名称的所有属性值;查找所述中间节点下的子节点,调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取所述子节点对应的属性名称的属性值;将所述所有属性值以及所述子节点对应的属性名称的属性值,按照对应关系存入所述中间节点数据表中。
优选地,所述方法还包括:将属性名称以及所述属性名称对应的属性值,以键值的映射关系存入到属性容器中。
一种业务对象的数据抽取装置,包括:表达式接收单元、树结构建立单元、数据抽取单元,其中,
所述表达式接收单元,用于接收变量表达式,所述变量表达式是针对业务对象中需要进行抽取的属性名称的表达;
所述树结构建立单元,用于根据变量表达式建立变量表达式树,所述变量表达式树中的每个节点对应所述需要进行抽取的属性名称;
所述数据抽取单元,用于当接收到所述业务对象的源数据后,调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取所述需要进行抽取的属性名称对应的属性值。
优选地,所述数据抽取单元具体用于:当需要抽取的属性名称对应的节点在所述变量表达式树中为叶子节点时,抽取所述叶子节点对应的属性名称的属性值。
优选地,所述数据抽取单元具体用于:当需要抽取的属性名称对应的节点在所述变量表达式树中为包含数据集合的叶子节点,建立叶子节点数据表;抽取所述叶子节点对应的属性名称的所有属性值;将所述所有属性值中的每一个存入所述叶子节点数据表中。
优选地,所述数据抽取单元具体用于:当需要抽取的属性名称对应的节点在所述变量表达式树中为中间节点时,查找所述中间节点下的子节点;调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取所述子节点对应的属性名称的属性值。
优选地,所述数据抽取单元具体用于:当需要抽取的属性名称对应的节点在所述变量表达式树中为包含数据集合的中间节点时,建立中间节点数据表;抽取所述中间节点对应的属性名称的所有属性值;查找所述中间节点下的子节点,调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取所述子节点对应的属性名称的属性值;将所述所有属性值以及所述子节点对应的属性名称的属性值,按照对应关系存入所述中间节点数据表中。
优选地,所述装置还包括:映射建立单元,具体用于:将属性名称以及所述属性名称对应的属性值,以键值的映射关系存入到属性容器中。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:可以根据变量表达式生成表达式树,对表达式树中的每个节点都定义不同的抽取方式,当接收到业务对象的源数据时,就可以对每个节点对应的属性名称的属性值进行抽取。由于变量表达式是表达了数据抽取的需求,所以也就做到按需抽取。从而解决了现有技术在抽取数据过程中进行json格式化而将所有数据都抽取的问题。此外,如果抽取过程中需要传输,那么就提高了传输效率;如果抽取过程中需要存储,也就节省了存储空间。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例1提供的一种业务对象的数据抽取方法的流程示意图;
图2为本申请实施例1提供的变量表达式树的示意图;
图3为本申请实施例1提供变量表达式树的局部结构示意图;
图4为本申请实施例2提供的一种实际应用中业务对象的数据抽取方法的流程示意图;
图5为本申请实施例2提供的根据变量表达式建立变量表达式树的示意图;
图6为本申请实施例2提供的基于图5的局部树形结构图;
图7为本申请实施例3提供的一种根据节点层次关系进行数据抽取的装置的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在进行本申请的技术方案的详细介绍之前,为了明确起见,这里先对几个术语作简要说明。在本申请实施例中将涉及业务对象、源数据、属性名称、属性值、节点、根节点、叶子节点以及中间节点。其中,业务对象在这里是指要进行数据抽取的对象,比如,如下表1至表4所示,要对“Person 1”业务对象中的数据进行抽取,那么“Person 1”就是业务对象、源数据就是业务对象包含的原始数据。业务对象的源数据中可以包含至少一个属性名称,属性名称可以对应一个属性值,也可以对应多个属性值,还可以对应另一个业务对象,比如,如下表2至表4,为“Person 1”业务对象下的“company”属性对应的“Company 1”业务对象和“Company 2”业务对象,“child”属性对应的“Child”业务对象。
Person 1业务对象
属性名称 |
类型 |
属性值 |
name |
List<String> |
张三,Zhang San,Chris Zhang |
age |
java.lang.Integer |
35 |
company |
Company[] |
company1,company2 |
child |
Child |
|
表1
Company 1业务对象
属性名称 |
类型 |
属性值 |
province |
java.lang.String |
浙江省 |
city |
java.lang.String |
杭州市 |
表2
Company 2业务对象
属性名称 |
类型 |
属性值 |
province |
java.lang.String |
广东省 |
city |
java.lang.String |
广州市 |
表3
Child业务对象
属性名称 |
类型 |
属性值 |
name |
java.lang.String |
张晓 |
age |
java.lang.Integer |
6 |
表4
“Person 1”业务对象中有“name”、“age”、“company”、“child”四个属性名称,“age”对应一个属性值“35”;“name”对应了中文名、汉语拼音以及英文名三个属性值;“company”对应“Company 1”和“Company 2”两个业务对象、“child”对应“Child”业务对象,其中又包含若干属性名称。树是一种非线性数据结构,它是节点按分支关系组织起来的结构,很像自然界中的树。根节点是指树结构的起始节点,也叫初始节点。有了起始节点,也会有终止节点,叶子节点就是指树结构中的终止节点,根节点与叶子节点之间还可以有中间节点。
以下结合附图,详细说明本申请各实施例提供的技术方案。
实施例1
如前所述,现有技术实现对业务对象源数据进行抽取的方法可以先对源数据进行json格式化,再获取格式化后的数据。由于采用了类似于C语言家族的一些习惯,所以很多程序都可以解析。但是,现有技术会遍历一个业务对象源数据中的全部数据,并对全部数据进行格式化。比如,如表1至表4的“person 1”业务对象,其源数据中包含“name”、“age”、“company”等属性名称,现有技术会将所有属性名称对应的属性值进行json格式化,如果仅期望抽取“name”这个属性名称的属性值是无法做到的。在一个应用场景中,应用程序A生成了很多业务对象,每个业务对象的源数据中都包含了很多属性名称以及属性值,当应用程序B需要应用程序A生成的业务对象源数据中的属性值,但应用程序B又无法直接读取源数据的格式时,就可以将应用程序A生成的所有源数据进行json格式化,作为一种中间的格式,以便应用程序B能够读取。如果应用程序B仅需要其中的一部分,但由于通过json格式化是将全部属性值都抽取过来,所以抽取后的很多数据是没有用的,也就是无法做到按需抽取。此外,如果中间需要进行数据传输,那么从数据传输的角度看,就造成了数据传输了浪费,从而降低了数据传输的效率;如果中间需要进行数据存储,那么从存储的角度看,也浪费了存储空间。所以基于此缺陷,本发明人提供了一种业务对象的数据抽取方法,来提供一种可以按需抽取数据的方法。该方法的流程示意图如图1所示,包括下述步骤:
步骤11:接收变量表达式。
如前所述,现有技术是将所有属性名称的属性值都进行抽取,而本申请可以进行按需抽取,所以,可以先接收变量表达式,这里说的变量表达式就可以是针对业务对象中需要进行抽取的属性名称的表达。比如,如表1至表4所示的业务对象“person 1”,如果需要抽取该业务对象的姓名,就可以以“name”作为一个变量表达式,如果需要抽取业务对象的公司的所在省份,就可以以“company.province”作为一个变量表达式,其中“.”可以表示一种层级的关系,即“province”为“company”属性下的一个属性。当需要抽取多个属性名称的属性值时,可以用“,”隔开,比如以“name,company.province”作为一个变量表达式。
步骤12:根据变量表达式建立变量表达式树。
当接收到变量表达式后,可以建立变量表达式树。具体地,如前文所述,树是一种非线性数据结构,它是节点按分支关系组织起来的结构,很像自然界中的树。所以,在建立变量表达式树时,就可以以属性名称之间的关系来建立,就像“树枝”与“树叶”的关系、“树枝”与“树干”的关系一样。变量表达式中包含的层级关系就是建立树的依据,每个表达式树都有一个根节点,可以以根节点为基础,利用业务对象中的属性名称之间的关系来建立变量表达式树。比如,业务对象就是一个根,业务对象下直属的属性名称就是根节点的子节点等。具体比如,对于表1至表4的“person 1”业务对象,根据变量表达式“name,age,company.province,company.city,child.name”,就可以建立如图2所示的变量表达式树,树中的每个节点对应需要进行抽取的属性名称,比如,节点11对应需要进行抽取的“name”属性名称。节点0就是根节点,节点11、节点12、节点21、节点22、节点23就是叶子节点,节点13和节点14就是中间节点。
步骤13:当接收到业务对象的源数据后,调用预先设定的针对变量表达式树中不同节点的数据抽取方式,抽取需要进行抽取的属性名称对应的属性值。
在步骤12中已经介绍,建立的表达式树中,会有不同的节点(根节点、中间节点、叶子节点)。由于业务对象的源数据中,就包含了所有属性名称之间的层级关系,那么,可以把不同的节点看作是不同的类,每种类中包含了预先设定的抽取方式,在抽取过程中,调用预先设定的针对不同的类的数据抽取方式,从而达到抽取需要进行抽取的属性名称对应的属性值的目的。
下面针对不同的节点分别进行介绍。
在一种实施方式中,调用预先设定的针对变量表达式树中不同节点的数据抽取方式,抽取需要进行抽取的属性名称对应的属性值,可以包括:当需要进行抽取的属性名称对应的节点在变量表达式树中为叶子节点时,抽取叶子节点对应的属性名称的属性值。
具体地,当节点在变量表达式树中为叶子节点时,由于不再有子节点,所以该节点对应的数据就是抽取的目标,可以将这种叶子节点定义为叶子节点类,抽取方式为抽取叶子节点对应的属性名称的属性值。
在实际应用中,业务对象会对不同的属性名称的属性值进行类型定义,比如如表1至表3所示,在Java语言中,“java.lang.String”以及“java.lang.Integer”,是java语言中的类型,分别表示字符串和整数;“List<String>”和“[]”都可以表示带有数据集合的数组,“List<String>”更具体地,业务可以表示多个值,而“[]”更具体地,业务可以表示多个业务类型。。在抽取属性名称为“name”的属性值时,会抽取符合字符串类型的数据,比如“ZhangSan”,“张三”等。在抽取属性名称为“age”的属性值时,会抽取符合整数类型的数据,比如“35”,“6”等。
结合表1至表4以及图2为例,叶子节点12对应“age”属性名称,所以就可以将该属性名称对应的属性值直接进行抽取,比如抽取到的属性值为“35”。类似地,叶子节点23对应“name”属性名称,所以就可以抽取该节点对应的属性名称的属性值为“张晓”。
在一种实施方式中,调用预先设定的针对变量表达式树中不同节点的数据抽取方式,抽取需要进行抽取的属性名称对应的属性值,可以包括:当需要进行抽取的属性名称对应的节点在变量表达式树中为包含数据集合的叶子节点,建立叶子节点数据表;抽取叶子节点对应的属性名称的所有属性值;将所有属性值中的每一个存入叶子节点数据表中。
具体地,在实际应用中,某个属性值可能会包含至少两个数据,组成数组,或者列表形式的数据集合,所以变量表达式树中的节点也就可以包含数据集合,可以将这种包含数据结构的叶子节点定义为包含数组的叶子节点类,抽取方式为建立叶子节点数据表,抽取叶子节点对应的属性名称的所有属性值;将所有属性值中的每一个存入叶子节点数据表中。在抽取过程中,就需要将数组/列表中的所有数据进行抽取。比如,结合表1至表4以及图2为例,属性名称为“name”的叶子节点11其类型为“List<String>”,其中包含了中文、汉语拼音以及英文三种类型的字符串,所以就可以先为该叶子节点建立一个数据表(叶子节点数据表[]),抽取到该叶子节点对应的属性名称的所有属性值依次为:“张三”、“Zhang San”以及“Chris Zhang”,那么就可以将这三个数据依次存入到叶子节点数据表中,得到结果:[“张三”,“Zhang San”,“Chris Zhang”],将该数据表作为一个整体的抽取结果。
在一种实施方式中,调用预先设定的针对变量表达式树中不同节点的数据抽取方式,抽取需要进行抽取的属性名称对应的属性值,可以包括:当需要进行抽取的属性名称对应的节点在变量表达式树中为中间节点时,查找中间节点下的子节点;调用预先设定的针对变量表达式树中不同节点的数据抽取方式,抽取子节点对应的属性名称的属性值。
具体地,当节点为中间节点时,就会有对应的子节点,可以将这种中间节点定义为中间节点类,抽取方式为查找中间节点下的子节点,调用预先设定的针对变量表达式树中不同节点的数据抽取方式,抽取子节点对应的属性名称的属性值。比如,结合表1至表4以及图2为例,节点14为中间节点,该节点有一个子节点:节点23,调用预先设定的针对变量表达式树中不同节点的数据抽取方式,抽取子节点23对应的属性名称的属性值。比如,得到的抽取结果为“张晓”。
在一种实施方式中,调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取所述需要进行抽取的属性名称对应的属性值,可以包括:当需要进行抽取的属性名称对应的节点在变量表达式树中为包含数据集合的中间节点时,建立中间节点数据表;抽取中间节点对应的属性名称的所有属性值;查找中间节点下的子节点,调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取子节点对应的属性名称的属性值;将所有属性值以及子节点对应的属性名称的属性值,按照对应关系存入所述中间节点数据表中。
具体地,可以将这种包含数据结构的中间节点定义为包含数组的中间节点类,抽取方式为上述过程。比如,结合表1至表4以及图2为例,在抽取业务对象Person的公司所在省份和城市过程,即抽取节点21和节点22的数据。由于中间节点13为包含数据集合的中间节点,可以转换为如图3所示,节点13包含了两个数据(company1,company2),由于节点13包含了三个数据,所以,节点21也就有两个分节点,节点211、节点212;节点22也就有两个分节点,节点221、节点222。可以先为该中间节点建立一个数据表(中间节点数据表[]),抽取中间节点对应的属性名称的所有属性值依次为:“company1”以及“company2”;再调用预先设定的针对所述变量表达式树中不同节点的数据抽取方式,抽取子节点对应的属性名称的属性值,比如得到节点211和节点212对应的属性名称的属性值分别为“浙江省”以及“广东省”;得到节点221和节点222对应的属性名称的属性值分别为“杭州市”以及“广州市”。由于中间节点13中的数据分别与节点21和节点22的两个分节点的数据是具有对应关系的,所以可以将中间节点对应的属性名称的所有属性值以及子节点对应的属性名称的属性值,按照对应关系存入所述中间节点数据表中,得到结果:[“company1”:{“浙江省”,“杭州市”},“company2”:{“广东省”,“广州市”}],并将该数据表作为一个整体的抽取结果。
需要说明的是,根节点也可以被定义一种类,比如它的抽取方式是作为一个入口来接收源数据,并调用子节点的抽取方式。
在实际应用中,完成步骤13后,就可以得到期望抽取到的数据了,但是,为了方便其它应用程序使用,还可以建立属性名称与属性值之间的映射关系。所以,该方法还可以包括:
步骤14:将属性名称以及属性名称对应的属性值,以键值的映射关系存入到属性容器中。
在步骤13中已经抽取到了属性值,所以可以建立属性名称与属性值之间的映射关系。具体地,该映射关系可以通过Key-value键值关系来实现,比如,可以构造一个属性容器MAP<String,Object>,以属性名称为key,属性值为value,存储于同一MAP中,具体比如,“age”为key,“35”为value,保存在一个MAP中,得到MAP<age,35>;具体又如,“name”为key,“[“张三”,“Zhang San”,“Chris Zhang”]”,则可以得到MAP<name,[“张三”,“Zhang San”,“Chris Zhang”]>。对于Person 1业务对象而言,整体就为一个MAP,下面包含了从该业务对象内抽取到的所有键值的映射关系。
在实际应用中,为了方便查看,可以将MAP进行文本间格式地转换,并输出。比如,对于业务对象Person,可以得到抽取结果:
“name”:[“张三”,“Zhang San”,“Chris Zhang”],“age”:“35”,
“company”:[“company1”:{“province”:“浙江省”,“city”:“杭州市”},“company2”:{“province”:“广东省”,“city”:“广州市”}],
“child”:{“name”:“张晓”}。
采用实施例1提供的该方法,可以根据变量表达式生成表达式树,对表达式树中的每个节点都定义不同的抽取方式,当接收到业务对象的源数据时,就可以对每个节点对应的属性名称的属性值进行抽取。由于变量表达式是表达了数据抽取的需求,所以也就做到按需抽取。从而解决了现有技术在抽取数据过程中进行json格式化而将所有数据都抽取的问题。此外,如果抽取过程中需要传输,那么就提高了传输效率;如果抽取过程中需要存储,也就节省了存储空间。
实施例2
基于相同的发明构思,实施例2提供了一种实际应用中业务对象的数据抽取方法,用于提供一种可以按需抽取的方法。该方法的流程示意图如图4所示,包括下述步骤:
步骤21:接收变量表达式。
由于需要抽取业务对象的姓名年龄,以及孩子的姓名年龄,所以变量表达式为“name,age,child.name,child.age”。
步骤22:根据变量表达式建立变量表达式树。
根据步骤21中的变量表达式建立如图5所示的变量表达式树。
步骤23:当接收到业务对象的源数据后,调用预先设定的针对变量表达式树中不同节点的数据抽取方式,抽取需要进行抽取的属性名称对应的属性值。
有下表5至表8的业务对象源数据。
Person 2业务对象
节点标识 |
类型 |
属性值 |
name |
List<String> |
李四,Li Si,James Li |
age |
java.lang.Integer |
38 |
child |
Child[] |
[Child1,Child2,Child3] |
address |
java.lang.String |
北京市……xxx |
表5
Child 1业务对象
节点标识 |
类型 |
属性值 |
name |
java.lang.String |
李浩轩 |
age |
java.lang.Integer |
13 |
表6
Child 2业务对象
节点标识 |
类型 |
属性值 |
name |
java.lang.String |
李毅轩 |
age |
java.lang.Integer |
10 |
表7
Child 3业务对象
节点标识 |
类型 |
属性值 |
name |
java.lang.String |
李泽轩 |
age |
java.lang.Integer |
8 |
表8
节点31和节点32为叶子节点,可以直接抽取这两个节点对应的属性名称的属性值,分别得到:[李四,Li Si,James Li]和38。
节点33为中间节点,且为包含至少两个数据的数据集合,如图6为中间节点33的局部树形结构图,抽取到节点33的属性值为:“child1”、“child2”以及“child3”。
节点411和节点421为叶子节点,可以直接抽取这两个节点对应的属性名称的属性值,得到:“李浩轩”、“13”;类似地,节点412和节点422的节点数据为:“李毅轩”、“10”;节点413和节点423的节点数据为:“李泽轩”、“8”。
步骤24:建立属性名称与属性值之间的映射关系。
可以得到如下结果:
“Person”:
“name”:[李四,Li Si,James Li],
“age”:“38”,
“child”:[“child1”:“{“name”:“李浩轩”,“age”:“13”}”,
“child2”:“{“name”:“李毅轩”,“age”:“10”}”,
“child3”:“{“name”:“李泽轩”,“age”:“8”,}”]。
采用实施例2提供的该方法,可以根据变量表达式生成表达式树,对表达式树中的每个节点都定义不同的抽取方式,当接收到业务对象的源数据时,就可以对每个节点对应的属性名称的属性值进行抽取。由于变量表达式是表达了数据抽取的需求,所以也就做到按需抽取。从而解决了现有技术在抽取数据过程中进行json格式化而将所有数据都抽取的问题。此外,如果抽取过程中需要传输,那么就提高了传输效率;如果抽取过程中需要存储,也就节省了存储空间。
实施例3
基于相同的发明构思,本实施例提供了一种业务对象的数据抽取装置,用于提供一种可以按需抽取数据的方法。图7为该装置的结构框图,该装置包括:
表达式接收单元31、树结构建立单元32、数据抽取单元33,其中,
表达式接收单元31,可以用于接收变量表达式,变量表达式是针对业务对象中需要进行抽取的属性名称的表达;
树结构建立单元32,可以用于根据变量表达式建立变量表达式树,变量表达式树中的每个节点对应需要进行抽取的属性名称;
数据抽取单元33,可以用于当接收到业务对象的源数据后,调用预先设定的针对变量表达式树中不同节点的数据抽取方式,抽取需要进行抽取的属性名称对应的属性值。
在一种实施方式中,数据抽取单元33,可以用于:当需要抽取的属性名称对应的节点在变量表达式树中为叶子节点时,抽取叶子节点对应的属性名称的属性值。
在一种实施方式中,数据抽取单元33,可以用于:当需要抽取的属性名称对应的节点在变量表达式树中为包含数据集合的叶子节点,建立叶子节点数据表;抽取叶子节点对应的属性名称的所有属性值;将所有属性值中的每一个存入叶子节点数据表中。
在一种实施方式中,数据抽取单元33,可以用于:当需要抽取的属性名称对应的节点在变量表达式树中为中间节点时,查找中间节点下的子节点;调用预先设定的针对变量表达式树中不同节点的数据抽取方式,抽取子节点对应的属性名称的属性值。
在一种实施方式中,数据抽取单元33,可以用于:当需要抽取的属性名称对应的节点在变量表达式树中为包含数据集合的中间节点时,建立中间节点数据表;抽取中间节点对应的属性名称的所有属性值;查找中间节点下的子节点,调用预先设定的针对变量表达式树中不同节点的数据抽取方式,抽取子节点对应的属性名称的属性值;将所有属性值以及子节点对应的属性名称的属性值,按照对应关系存入中间节点数据表中。
在一种实施方式中,该装置还可以包括:映射建立单元,可以用于:将属性名称以及属性名称对应的属性值,以键值的映射关系存入到属性容器中。
采用实施例3提供的该装置,可以根据变量表达式生成表达式树,对表达式树中的每个节点都定义不同的抽取方式,当接收到业务对象的源数据时,就可以对每个节点对应的属性名称的属性值进行抽取。由于变量表达式是表达了数据抽取的需求,所以也就做到按需抽取。从而解决了现有技术在抽取数据过程中进行json格式化而将所有数据都抽取的问题。此外,如果抽取过程中需要传输,那么就提高了传输效率;如果抽取过程中需要存储,也就节省了存储空间。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。