CN108694194A - 一种构造数据对象的方法和装置 - Google Patents
一种构造数据对象的方法和装置 Download PDFInfo
- Publication number
- CN108694194A CN108694194A CN201710227914.5A CN201710227914A CN108694194A CN 108694194 A CN108694194 A CN 108694194A CN 201710227914 A CN201710227914 A CN 201710227914A CN 108694194 A CN108694194 A CN 108694194A
- Authority
- CN
- China
- Prior art keywords
- data
- parsing
- entry
- note
- item
- 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
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种构造数据对象的方法,其特征在于,该方法包括:获得结构化源数据;根据预定义的数据解析策略,对该结构化源数据中的每一个有效的数据条目执行解析,以得到与该数据条目相对应的符合所述数据解析策略的数据集;针对该数据集应用预定义的对数据对象的注解以从该数据集中提取数据项,所述预定义的对数据对象的注解定义所述数据对象的一个或多个属性;根据所提取的数据项来构造与该数据条目相对应的数据对象。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种构造数据对象的方法、装置、电子设备和可读存储介质。
背景技术
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
现有的结构化源数据解析技术方案通过IO流读取源数据,每解析一行数据就要构造一个实体的对象,然后把数据保存到数据库中。这种技术方案代码的可重用性非常差,每一种内容格式的文件都需要写完整的解析流程。例如“学生”源数据包括“姓名”、“学号”、“年龄”三个属性;“学校”源数据则包括“名称”、“地址”两个属性。那么在解析“学生”和“学校”两种源数据的时候,需要针对不同的属性构建两种不同的解析流程。如果有成百上千的不同格式的源数据要解析处理,对每个文件单独编写解析程序,工作量非常繁重且容易出错。
此外,除了对每个源数据单独编写解析程序外,还必须考虑源数据处理的方式。例如,“学生”源数据解析后需要存储到数据库中,而“学校”源数据解析后需要存储到磁盘中。在编写解析程序之外,还需要对不同的经解析的源数据编写特定的操作程序。
除此之外,随着云存储技术的发展和普及,越来越多的企业和个人将数据存储在诸如云存储的远程数据存储上。在这种情况下,目前读取云存储上的源数据的方法主要采用Java IO流的方式来读取。在有成百上千的不同格式的源数据要解析处理的情况下,每次读取一行数据、构建该行数据的对象,显然是非常低效的。
发明内容
有鉴于此,本发明实施例提供构造数据对象的方法、装置、电子设备和可读存储介质,能够批量处理诸如云存储等上保存的源数据、其他远程数据存储上的源数据、以及本地文件中的源数据,并通过基于反射的注解来动态解析源数据生成最终的解析对象,最后通过回调函数来对解析生成的对象执行后续操作。上面描述的整个文件解析逻辑可以集成公用的代码库,供用户使用,用户只需要预定义源数据内容的格式、源数据解析后返回的对象以及保存到数据库的回调函数。
为实现上述目的,根据本发明实施例的一个方面,提供了一种构造数据对象的方法。
根据本发明实施例的一个方面的构造数据对象的方法,包括:获得结构化源数据;根据预定义的数据解析策略,对该结构化源数据中的每一个有效的数据条目执行解析,以得到与该数据条目相对应的符合所述数据解析策略的数据集;针对该数据集应用预定义的对数据对象的注解以从该数据集中提取数据项,所述预定义的对数据对象的注解定义所述数据对象的一个或多个属性;根据所提取的数据项来构造与该数据条目相对应的数据对象。
可选地,利用回调函数来对所构造的数据对象执行操作。
可选地,其中所述数据解析策略包括指示有效的数据条目在所述一个或多个源数据中的位置的位置信息和指示所述有效的数据条目中的数据项之间的分隔符的分隔符信息。
可选地,根据所述数据解析策略对结构化源数据中的每一个有效的数据条目执行解析的步骤还包括根据所述位置信息,在所述一个或多个结构化源数据中确定一个或多个有效的数据条目;针对每一个有效的数据条目:根据所述分隔符信息,从该有效的数据条目中确定至少一个数据项,从而得到包含所确定的至少一个数据项的经解析的数据集。
可选地,其中所述对数据对象的注解包括要构造的数据对象的属性和与所述要构造的数据对象的属性对应的数据项在所述经解析的数据集中的位置。
可选地,其中利用所述对数据对象的注解来从数据集中提取数据项的步骤还包括:根据与所述要构造的数据对象的属性对应的数据项在所述经解析的数据集中的位置从所述经解析的数据集中提取所述数据项。
可选地,利用所述对数据对象的注解来从数据集中提取数据项的步骤包括:根据所述对数据对象的注解所定义的顺序,将所提取的数据项分配给所述要构造的数据对象的属性,其中每个要构造的数据对象与每一个有效的数据条目相对应。
可选地,其中所述结构化源数据是多个结构化源数据中的一个,针对所述多个结构化源数据中的每一个分别执行所述获得、所述解析、所述提取、所述构造步骤,并且针对所述多个结构化源数据中的至少两个结构化源数据所执行的所述获得、所述解析、所述提取、所述构造步骤是并行执行的。
可选地,其中所述数据对象是Java对象,并且其中所述对数据对象的注解是基于Java反射机制的Java对象注解。
根据本发明实施例的另一个方面,还提供了一种构造数据对象的装置。
根据本发明实施例的一个方面的构造数据对象的装置包括:数据获取模块,用于获得结构化源数据;解析引擎模块,包括:策略解析子模块,用于根据预定义的数据解析策略,对该结构化源数据中的每一个有效的数据条目执行解析,以得到与该数据条目相对应的符合所述数据解析策略的数据集;数据项提取子模块,用于针对该数据集应用预定义的对数据对象的注解以从该数据集中提取数据项,所述预定义的对数据对象的注解定义所述数据对象的一个或多个属性;对象构造子模块,用于根据所提取的数据项来构造与该数据条目相对应的数据对象。
可选地,所述装置还包括回调函数模块,用于利用回调函数来对所构造的数据对象执行操作。
可选地,其中所述数据解析策略包括指示有效的数据条目在所述一个或多个源数据中的位置的位置信息和指示所述有效的数据条目中的数据项之间的分隔符的分隔符信息。
可选地,所述策略解析子模块还用于:根据所述位置信息,在所述一个或多个结构化源数据中确定一个或多个有效的数据条目;针对每一个有效的数据条目:根据所述分隔符信息,从该有效的数据条目中确定至少一个数据项,从而得到包含所确定的至少一个数据项的经解析的数据集。
可选地,其中所述对数据对象的注解包括要构造的数据对象的属性和与所述要构造的数据对象的属性对应的数据项在所述经解析的数据集中的位置。
可选地,所述数据项提取子模块还用于:根据与所述要构造的数据对象的属性对应的数据项在所述经解析的数据集中的位置从所述经解析的数据集中提取所述数据项。
可选地,所述对象构造子模块还用于:根据所述对数据对象的注解所定义的顺序,将所提取的数据项分配给所述要构造的数据对象的属性以构造数据对象,其中每个要构造的数据对象与每一个有效的数据条目相对应。
可选地,其中,所述结构化源数据是多个结构化源数据中的一个,针对所述多个结构化源数据中的每一个分别执行所述获得、所述解析、所述提取、所述构造步骤,并且针对所述多个结构化源数据中的至少两个结构化源数据所执行的所述获得、所述解析、所述提取、所述构造步骤是并行执行的。
可选地,其中所述对象是Java对象,并且其中所述对数据对象的注解是基于Java反射机制的Java对象注解。
根据本发明实施例的另一个方面,还提供了一种构造数据对象的电子设备。
根据本发明实施例的另一个方面的构造数据对象的电子设备,其特征在于,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现构造数据对象的方法。
根据本发明实施例的另一个方面,还提供了一种计算机可读介质。
根据本发明实施例的另一个方面的计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现构造数据对象的方法。
上述发明中的一个实施例具有如下优点或有益效果:因为采用基于反射的对象注解来解析源数据、构造数据对象的技术手段,所以克服了不同格式的源数据需要构造不同解析程序的技术问题,进而达到不同的源数据采用相同解析逻辑处理,提高了代码复用性的技术效果;因为采用了诸如线程池的并行处理方式,克服了逐行解析效率低的问题,达到提高解析效率的技术效果;此外因为采用了回调函数机制,更方便对所生成对象的后续处理。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的构造数据对象的方法的流程图;
图2是根据本发明实施例的用线程池实现对源数据并行处理的示意图;
图3是根据本发明实施例的利用解析引擎对所述一个或多个源数据进行解析的流程图;
图4是根据本发明实施例的利用回调函数执行后续操作的流程图;
图5是根据本发明实施例的构造数据对象的装置的示意图;
图6是适于用来实现本申请实施例的终端设备或服务器的计算机***的结构示意图
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明一个实施例的构造数据对象的方法的流程图,如图1所示描绘了根据本发明一个实施例的构造数据对象的方法。
在一个实施例中,待解析的源数据是存储在云存储上的文件中的数据。虽然在该实施例中待解析的源数据是从远程数据存储下载的,但是根据本发明的实施例的解析过程也适用于解析本地数据。
在图1的步骤S11中,可以首先从诸如云存储的远程数据存储上批量下载源数据。在该实施例中,待解析的源数据是存储在云存储上的文件数据,在步骤S11中将文件从云存储上批量下载。不同于现有技术的将文件一个一个地下载、一个一个地解析,而是将云存储上的文件批量下载以待处理。在一个实施例中,可以将所下载的文件保存到服务器的磁盘上,同时返回文件在磁盘的路径并保存到文件有序队列中。在其他实施例中,可以将所下载的文件保存到缓存中,以供后续处理。替选地,待解析的文件只是本地文件,则无需从远程数据存储获取。在其他实施例中,诸如待解析的源数据是本地文件,则不需要执行步骤S11。
在图1的步骤S12中,可以实现对所述一个或多个源数据的并行处理。优选地,针对一个或多个源数据构造数据对象的过程可以包括S12,以并行处理一个或多个源数据。在一个实施例中,待解析的一个或多个源数据是云存储上的文件数据。将文件从云存储批量下载到本地磁盘后,文件的路径或其他标识会保存到文件队列中。在另一个实施例中,将文件从云存储批量下载到缓存中,并在诸如文件列表中记录文件的路径或其他标识。对文件的并行处理可以采用诸如线程池、进程池、分布式计算等各种并行计算方式来实现。在另一个实施例中,待处理的一个或多个源数据不是文件,而是其他形式的诸如数据表的源数据,也可以以类似的方式进行处理。以线程池来实现并行处理的实施例示意图如图2所示。
图2是根据本发明实施例的用线程池实现对源数据并行处理的示意图,如图2所示,描绘了根据本发明实施例的用线程池实现对文件并行处理的示意图。在一个实施例中,在将文件从云存储批量下载到本地磁盘之后,后台定期地从文件有序队列中获取文件的路径并分发给多个线程池。如图所述,在线程0中获取了文件0的信息,在线程1中获取了文件1的信息,以此类推。以线程池的方式在线程0至线程n中并行地处理所下载的文件1至文件n。
在一个实施例中,所下载的文件可以是各种不同类型格式的文件。如下表1和下表2所示。
例如,个人信息数据:
姓名,年龄,学历,职业
张三,25,本科,教师
李四,21,专科,司机
例如,商品信息:
名称,价格,颜色,规格
A品牌手机,2999,白色,5.5寸屏
B品牌手机,5999,金色,5.5寸屏
个人信息和商品信息具有不同的属性、类型、单位、格式等。在这一种实施方式中,采用诸如线程池来实现并行处理,则可以在线程0至线程n中,互相独立地处理解析这些不同类型格式的文件。
返回图1,在图1的步骤S13中,利用解析引擎对一个或多个源数据进行解析。具体解析过程参见图3。
图3是根据本发明实施例的利用解析引擎对所述一个或多个源数据进行解析的流程图,如图3所示,描绘了根据本发明实施例的利用解析引擎对所下载的数据进行解析的流程。
在图3的步骤S31中,首先获取解析策略。解析引擎是根据解析策略对每一行数据进行解析的,每一行数据可以称之为数据条目。在一个实施例中,解析策略主要包括以下一些策略:(1)定义跳过无效数据。例如,跳过文件中的前多少行,也就是文件前面多少行不做解析(2)定义分隔符。例如,定义文件内容数据的文本是根据什么符号分隔,比如csv文件是逗号分隔符文件,它的内容数据就是按照逗号分隔。
在一种实施方式中,解析策略由用户定义,并传递给解析引擎。在另一种实施方式中,解析策略是在程序中预定义的,用户在解析文件数据的时候遵循解析策略的规范。
在示例实施例中,待解析的文件源数据如下:
-----*&&&&))^^_
jklfds^&*%&%P}{
姓名,年龄,学历,职业
张三,25,本科,教师
李四,21,专科,司机
在该实施例中,第一行和第二行是无用的信息,不需要做解析,则解析策略定义“跳过前2行”。例如,规范的格式为“skip_lines:2”,表示跳过前2行。此外,在该示例的文件源数据中,分隔符是逗号。则解析策略还需要定义“逗号分隔”。例如,规范的格式为“separator:,”表示文件内容是用逗号分隔的。当解析引擎获取到解析策略后,根据解析策略的规范来执行相应的解析动作。比如“skip_lines:2”,程序会自动跳过前2行;“separator:,”程序会自动根据逗号对这一行的数据进行分隔。
在图3的步骤S32中,利用行解析器读取每行数据。在一个实施例中,解析引擎获取到解析策略后,调用行解析器。行解析器的作用是读取文件中每行的数据,并提供给解析引擎根据解析策略解析该行的数据。
继续上面的示例实施例,在该文件中:
姓名,年龄,学历,职业
张三,25,本科,教师
李四,21,专科,司机
其中,经由行解析器读取到每行数据:
第一行是:(姓名,年龄,学历,职业)
第二行是:(张三,25,本科,教师)
第三行是:(李四,21,专科,司机)
在图3的步骤S33中,解析引擎根据用户定义的对数据对象的注解对每行数据进行解析,将每行数据转换成与要构建的对象属性相对应的数据项。在一种实施方式中,对数据对象的注解的定义方式是根据对象中的字段在文本中出现的序号进行标注的。在一个实施例中,要构建的对象是Java对象,则对数据对象的注解是基于Java反射机制的对象注解。对象注解帮助用户通过定义所构造对象的属性,来提取有效的对象属性字段。
术语“注解”是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。并不直接影响代码的语义,但是他可以被看做是程序的工具或者类库。它会反过来对正在运行的程序语义有所影响。例如,Java注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,javac编译器、开发工具和其他程序可以通过反射来了解类及各种元素上有无何种标记,根据标记执行相应的操作。
在图3的步骤S34中,将利用注解解析出来的数据项赋值给要构造的对象的属性,以构造对象。
在一个实施例中,例如,文件源数据中每一行的数据要转化成学生(Student)这样一个对象,Student对象有姓名(name)和年龄(age)两个属性。而文件源数据中也有学生的名字和年龄数据,用逗号分隔符隔开。那么要把文件源数据的内容转换成Student对象的name和age,就需要在Student对象的属性上面增加序号注解。@Column(order=0)表示这个属性的值对应文件中的第1列。文件源数据的内容如下所示:
姓名,年龄
张三,19
李四,15
王五,21
@Column(order=0)注解通过解析引擎根据反射机制来翻译,基本过程是:
首先,解析引擎通过行解析器从文件源数据中获取到第二行数据(张三,19),接着获取到Student对象的所有属性(name和age);
然后,解析引擎获取到属性name上的注解@Column(order=0),从注解里面解析出order为0,意思就是从数据(张三,19)中获取第一列的数据“张三”,并把“张三”赋值给name;
而后,获取到属性age上的注解@Column(order=1),从注解里面解析出order为1,意思就是从数据(张三,19)中获取第二列的数据“19”,并把“19”赋值给age;
这样就生成了一个Student对象,该Student对象name是张三,age是19。
在一个实施例中,通过Java语言开发的程序代码来实现解析过程的情况下,采用Java反射机制。继续上面Student对象的示例,Java反射如下:
class Student{
@Column(order=0)
String name;
@Column(order=1)
int age;
}
这样通过Java反射后,无论什么格式的文件源数据都可转化成用户想要的Java对象。
返回图1,在图1的步骤S14中,对所构造的对象执行后续操作。利用回调函数对所构造的对象执行后续操作。该步骤是通过图4实现的。
图4是根据本发明实施例的利用回调函数执行后续操作的流程图,如图4所示,描绘了利用回调函数执行后续操作的流程。
在图4的步骤S41中,在解析完成后,调用用户定义的回调函数。回调函数是用户自定义的函数,在文件源数据解析完成后会自动调用。
在一种实施方式中,回调函数接口由解析引擎定义,但是回调函数的实现由用户定义。回调函数主要的作用是让用户对文件源数据解析不可见,而对数据的处理可见。用户可以灵活的定义回调函数,以处理用户的多种需求。当解析引擎解析完成后,得到每行数据对应的对象。在一种实施方式中,可以以数组来存储该对象。
继续上面Student对象的示例,经过解析得到的三个Student对象,这三个Student对象可以保存在对象数组中:
(张三,19)
(李四,15)
(王五,21)
在图4的步骤S42中,对经解析得到的对象执行后续操作。如上所述,可以通过回调函数执行用户定义的逻辑。例如,在一个实施例中,用户需要在解析完成后把解析的数据保存到数据库,则用户可以在回调函数中编写保存数据库的操作。在另一个实施例中,用户需要把解析后的数据存储到缓存中,则其只需要在回调函数中编写存储到缓存的逻辑。
图5是根据本发明实施例的构造数据对象的装置的示意图,如图5所示,描绘了根据本发明实施例的构造数据对象的装置的模块。
数据获取模块51,用于从远程数据存储端批量下载一个或多个数据,诸如从云存储端批量下载一个或多个数据。并且实现对所下载数据的并行处理。在一个实施例中,用线程池的方式实现并行处理。在其他实施例中,可以用进程池、分布式***等方式来实现并行处理。
解析引擎模块52,用于实现根据对象注解对所下载的数据进行解析的过程。解析引擎模块52包括策略解析子模块521、行解析器子模块522、数据项提取子模块523、和对象构造子模块524。
策略解析子模块521用于获取解析策略,并执行解析。在一种实施方式中,解析策略由用户定义,并传递给解析引擎。在另一种实施方式中,解析策略是在程序中预定义的,用户在解析文件源数据的时候遵循解析策略的规范。
行解析器子模块522,用于读取行数据。在一个实施例中,解析引擎获取到解析策略后,调用行解析器。行解析器的作用是读取文件源数据中每行的数据,并提供给策略解析子模块521根据解析策略解析该行的数据。
数据项提取子模块523,用于对行解析器读取出来的每行数据进行解析,利用对数据对象的注解来提取与要构造的对象属性相对应的数据项,以用作对象的字段。
对象构造子模块524,用于利用数据项提取子模块523所提取的数据项,构造对象。
回调函数模块53,用于在解析完成后,调用用户定义的回调函数来对经解析的对象执行后续操作。回调函数是用户自定义的函数,在文件源数据解析完成后会自动调用。
下面参考图6,其示出了适于用来实现本申请实施例的终端设备的计算机***600的结构示意图。图6示出的终端设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图6所示,计算机***600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有***600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的***中限定的上述功能。
需要说明的是,本申请所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括数据获取模块、解析引擎模块、和回调函数模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,数据获取还可以被描述为“用于获得结构化源数据的模块”。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:获得结构化源数据;根据预定义的数据解析策略,对该结构化源数据中的每一个有效的数据条目执行解析,以得到与该数据条目相对应的符合所述数据解析策略的数据集;针对该数据集应用预定义的对数据对象的注解以从该数据集中提取数据项,所述预定义的对数据对象的注解定义所述数据对象的一个或多个属性;根据所提取的数据项来构造与该数据条目相对应的数据对象。
根据本发明实施例的技术方案,能够基于反射机制,采用线程池的方式批量处理诸如云存储上保存的文件、其他远程数据存储上的文件、以及本地文件中的数据,并通过注解来动态解析数据文件生成最终的解析对象,最后通过回调函数处理解析对象并保存到数据库中。从而提高效率,提高代码复用率。
上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (20)
1.一种构造数据对象的方法,其特征在于,该方法包括:
获得结构化源数据;
根据预定义的数据解析策略,对该结构化源数据中的每一个有效的数据条目执行解析,以得到与该数据条目相对应的符合所述数据解析策略的数据集;
针对该数据集应用预定义的对数据对象的注解以从该数据集中提取数据项,所述预定义的对数据对象的注解定义所述数据对象的一个或多个属性;
根据所提取的数据项来构造与该数据条目相对应的数据对象。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
利用回调函数来对所构造的数据对象执行操作。
3.如权利要求1所述的方法,其特征在于,其中所述数据解析策略包括指示有效的数据条目在所述一个或多个源数据中的位置的位置信息和指示所述有效的数据条目中的数据项之间的分隔符的分隔符信息。
4.如权利要求3所述的方法,其特征在于,根据所述数据解析策略对结构化源数据中的每一个有效的数据条目执行解析的步骤还包括:
根据所述位置信息,在所述一个或多个结构化源数据中确定一个或多个有效的数据条目;
针对每一个有效的数据条目:
根据所述分隔符信息,从该有效的数据条目中确定至少一个数据项,从而得到包含所确定的至少一个数据项的经解析的数据集。
5.如权利要求1所述的方法,其特征在于,其中所述对数据对象的注解包括要构造的数据对象的属性和与所述要构造的数据对象的属性对应的数据项在所述经解析的数据集中的位置。
6.如权利要求5所述的方法,其特征在于,其中利用所述对数据对象的注解来从数据集中提取数据项的步骤还包括:
根据与所述要构造的数据对象的属性对应的数据项在所述经解析的数据集中的位置从所述经解析的数据集中提取所述数据项。
7.如权利要求6所述的方法,其特征在于,利用所述对数据对象的注解来从数据集中提取数据项的步骤包括:
根据所述对数据对象的注解所定义的顺序,将所提取的数据项分配给所述要构造的数据对象的属性,其中每个要构造的数据对象与每一个有效的数据条目相对应。
8.如权利要求1所述的方法,其特征在于,其中,所述结构化源数据是多个结构化源数据中的一个,针对所述多个结构化源数据中的每一个分别执行所述获得、所述解析、所述提取、所述构造步骤,并且针对所述多个结构化源数据中的至少两个结构化源数据所执行的所述获得、所述解析、所述提取、所述构造步骤是并行执行的。
9.如权利要求1所述的方法,其特征在于,其中所述数据对象是Java对象,并且其中所述对数据对象的注解是基于Java反射机制的Java对象注解。
10.一种构造数据对象的装置,其特征在于,所述装置包括:
数据获取模块,用于获得结构化源数据;
解析引擎模块,包括:
策略解析子模块,用于根据预定义的数据解析策略,对该结构化源数据中的每一个有效的数据条目执行解析,以得到与该数据条目相对应的符合所述数据解析策略的数据集;
数据项提取子模块,用于针对该数据集应用预定义的对数据对象的注解以从该数据集中提取数据项,所述预定义的对数据对象的注解定义所述数据对象的一个或多个属性;
对象构造子模块,用于根据所提取的数据项来构造与该数据条目相对应的数据对象。
11.如权利要求10所述的装置,其特征在于,所述装置还包括:
回调函数模块,用于利用回调函数来对所构造的数据对象执行操作。
12.如权利要求10所述的装置,其特征在于,其中所述数据解析策略包括指示有效的数据条目在所述一个或多个源数据中的位置的位置信息和指示所述有效的数据条目中的数据项之间的分隔符的分隔符信息。
13.如权利要求12所述的装置,其特征在于,所述策略解析子模块还用于:
根据所述位置信息,在所述一个或多个结构化源数据中确定一个或多个有效的数据条目;
针对每一个有效的数据条目:
根据所述分隔符信息,从该有效的数据条目中确定至少一个数据项,从而得到包含所确定的至少一个数据项的经解析的数据集。
14.如权利要求10所述的装置,其特征在于,其中所述对数据对象的注解包括要构造的数据对象的属性和与所述要构造的数据对象的属性对应的数据项在所述经解析的数据集中的位置。
15.如权利要求14所述的装置,其特征在于,所述数据项提取子模块还用于:
根据与所述要构造的数据对象的属性对应的数据项在所述经解析的数据集中的位置从所述经解析的数据集中提取所述数据项。
16.如权利要求15所述的装置,其特征在于,所述对象构造子模块还用于:
根据所述对数据对象的注解所定义的顺序,将所提取的数据项分配给所述要构造的数据对象的属性以构造数据对象,其中每个要构造的数据对象与每一个有效的数据条目相对应。
17.如权利要求10所述的装置,其特征在于,其中,所述结构化源数据是多个结构化源数据中的一个,针对所述多个结构化源数据中的每一个分别执行所述获得、所述解析、所述提取、所述构造步骤,并且针对所述多个结构化源数据中的至少两个结构化源数据所执行的所述获得、所述解析、所述提取、所述构造步骤是并行执行的。
18.如权利要求10所述的装置,其特征在于,其中所述数据对象是Java对象,并且其中所述对数据对象的注解是基于Java反射机制的Java对象注解。
19.一种构造数据对象的电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-9中任一所述的方法。
20.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-9中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710227914.5A CN108694194A (zh) | 2017-04-10 | 2017-04-10 | 一种构造数据对象的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710227914.5A CN108694194A (zh) | 2017-04-10 | 2017-04-10 | 一种构造数据对象的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108694194A true CN108694194A (zh) | 2018-10-23 |
Family
ID=63842370
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710227914.5A Pending CN108694194A (zh) | 2017-04-10 | 2017-04-10 | 一种构造数据对象的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108694194A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110018824A (zh) * | 2018-11-28 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 一种将领域对象转换为视图对象的方法和装置 |
CN112051999A (zh) * | 2020-09-03 | 2020-12-08 | 中国银行股份有限公司 | 配置化的下载文件生成方法及装置 |
CN112181804A (zh) * | 2020-08-31 | 2021-01-05 | 五八到家有限公司 | 一种参数校验方法、设备以及存储介质 |
CN113835707A (zh) * | 2021-09-30 | 2021-12-24 | 唯品会(广州)软件有限公司 | 一种造数方法、装置、设备及可读存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080082571A1 (en) * | 2006-09-29 | 2008-04-03 | Miyuki Sakai | System and Method for Transforming Tabular Form Date into Structured Document |
CN102611836A (zh) * | 2012-02-06 | 2012-07-25 | 上海理工大学 | 一种基于Labview的高速图像采集方法 |
CN103745010A (zh) * | 2014-01-28 | 2014-04-23 | 北京京东尚科信息技术有限公司 | 一种基于csv文件确定对象属性值的方法和装置 |
CN104182484A (zh) * | 2014-08-07 | 2014-12-03 | 北京京东尚科信息技术有限公司 | 一种实现HBase数据与Java域对象映射的方法和装置 |
CN105491135A (zh) * | 2015-12-11 | 2016-04-13 | 小米科技有限责任公司 | 建立数据连接的方法及装置 |
CN106202082A (zh) * | 2015-04-30 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 组装基础数据缓存的方法及装置 |
CN106302442A (zh) * | 2016-08-12 | 2017-01-04 | 广州慧睿思通信息科技有限公司 | 一种基于Java语言的网络通讯数据包解析方法 |
CN106354481A (zh) * | 2015-07-13 | 2017-01-25 | 阿里巴巴集团控股有限公司 | 对http请求进行统一映射的方法和设备 |
-
2017
- 2017-04-10 CN CN201710227914.5A patent/CN108694194A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080082571A1 (en) * | 2006-09-29 | 2008-04-03 | Miyuki Sakai | System and Method for Transforming Tabular Form Date into Structured Document |
CN102611836A (zh) * | 2012-02-06 | 2012-07-25 | 上海理工大学 | 一种基于Labview的高速图像采集方法 |
CN103745010A (zh) * | 2014-01-28 | 2014-04-23 | 北京京东尚科信息技术有限公司 | 一种基于csv文件确定对象属性值的方法和装置 |
CN104182484A (zh) * | 2014-08-07 | 2014-12-03 | 北京京东尚科信息技术有限公司 | 一种实现HBase数据与Java域对象映射的方法和装置 |
CN106202082A (zh) * | 2015-04-30 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 组装基础数据缓存的方法及装置 |
CN106354481A (zh) * | 2015-07-13 | 2017-01-25 | 阿里巴巴集团控股有限公司 | 对http请求进行统一映射的方法和设备 |
CN105491135A (zh) * | 2015-12-11 | 2016-04-13 | 小米科技有限责任公司 | 建立数据连接的方法及装置 |
CN106302442A (zh) * | 2016-08-12 | 2017-01-04 | 广州慧睿思通信息科技有限公司 | 一种基于Java语言的网络通讯数据包解析方法 |
Non-Patent Citations (4)
Title |
---|
(美)斯佩克特: "《R语言数据操作》", 31 July 2011 * |
LEONGFENG: "利用dom4j包和反射动态解析不同实体类型的xml", 《HTTPS://BLOG.CSDN.NET/》 * |
UUUUTAOSSIENUUUU: "回调函数", 《HTTPS://BLOG.CSDN.NET/》 * |
张晓明: "《计算机网络编程技术》", 31 October 2009 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110018824A (zh) * | 2018-11-28 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 一种将领域对象转换为视图对象的方法和装置 |
CN112181804A (zh) * | 2020-08-31 | 2021-01-05 | 五八到家有限公司 | 一种参数校验方法、设备以及存储介质 |
CN112181804B (zh) * | 2020-08-31 | 2023-09-08 | 五八到家有限公司 | 一种参数校验方法、设备以及存储介质 |
CN112051999A (zh) * | 2020-09-03 | 2020-12-08 | 中国银行股份有限公司 | 配置化的下载文件生成方法及装置 |
CN112051999B (zh) * | 2020-09-03 | 2024-04-19 | 中国银行股份有限公司 | 配置化的下载文件生成方法及装置 |
CN113835707A (zh) * | 2021-09-30 | 2021-12-24 | 唯品会(广州)软件有限公司 | 一种造数方法、装置、设备及可读存储介质 |
CN113835707B (zh) * | 2021-09-30 | 2024-01-19 | 唯品会(广州)软件有限公司 | 一种造数方法、装置、设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108171276B (zh) | 用于生成信息的方法和装置 | |
CN108694194A (zh) | 一种构造数据对象的方法和装置 | |
CN110472207A (zh) | 表单生成方法和装置 | |
US20160117291A1 (en) | Conversion of a presentation to darwin information typing architecture (dita) | |
CN108804327A (zh) | 一种自动生成测试数据的方法和装置 | |
CN109522341A (zh) | 实现基于sql的流式数据处理引擎的方法、装置、设备 | |
CN109036425A (zh) | 用于操作智能终端的方法和装置 | |
CN114424257A (zh) | 使用机器学习对表格数据进行自动描绘和提取 | |
CN109271403A (zh) | 一种数据查询的操作方法、装置、介质及电子设备 | |
CN108108342A (zh) | 结构化文本的生成方法、检索方法及装置 | |
CN109871311A (zh) | 一种推荐测试用例的方法和装置 | |
CN108959436A (zh) | 用于语音对话平台的词库编辑方法及*** | |
CN110489087A (zh) | 一种生成分形结构的方法、装置、介质和电子设备 | |
US20220121668A1 (en) | Method for recommending document, electronic device and storage medium | |
CN109101309A (zh) | 用于更新用户界面方法和装置 | |
CN109389660A (zh) | 图像生成方法和装置 | |
CN109284367A (zh) | 用于处理文本的方法和装置 | |
CN109002282A (zh) | 一种在web页面开发中实现动画效果的方法和装置 | |
CN107688609A (zh) | 一种职位标签推荐方法和计算设备 | |
CN108984564A (zh) | 数据存储***、方法和装置 | |
Idris | NumPy Cookbook | |
Usuelli | R machine learning essentials | |
CN108959294A (zh) | 一种访问搜索引擎的方法和装置 | |
CN109375910A (zh) | 类文件生成方法、装置、电子设备及存储介质 | |
CN108460020A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20181023 |