本发明涉及信息技术领域,尤其涉及一种数据处理方法及装置。
背景技术:
在开发测试过程中,开发人员经常需要将两个对象进行对比,以确定这两个对象是否一致。然而,传统方式在对比两个对象时,通常是同时对两个对象做深层遍历,在这两个对象不一致时,返回对比结果。在采用传统方式对两个对象进行对比时,由于传统方式一般是边遍历边比较,使得代码逻辑复杂,很容易遗漏两个对比对象的对比字段,造成对比结果的不准确。
技术实现要素:
为克服相关技术中存在的问题,本发明提供一种数据处理方法及装置。
根据本发明实施例的第一方面,提供一种数据处理方法,包括:
在获取到两个待比较对象时,将所述两个待比较对象分别转换为两个扁平对象;
分别遍历所述两个扁平对象,得到每个扁平对象的属性和所述属性对应的属性值;
分别比较所述两个扁平对象的属性和所述属性对应的属性值,得到比较结果。
根据本发明实施例的第二方面,提供一种数据处理装置,包括:
对象转换单元,用于在获取到两个待比较对象时,将所述两个待比较对象分别转换为两个扁平对象;
对象遍历单元,用于分别遍历所述两个扁平对象,得到每个扁平对象的属性和所述属性对应的属性值;
比较单元,用于分别比较所述两个扁平对象的属性和所述属性对应的属性值,得到比较结果。
本发明的实施例提供的技术方案可以包括以下有益效果:
本发明提供的数据处理方法及装置,在对两个待比较对象比较时,将这两个待比较分别转换为本发明自定义数据类型的扁平对象。然后分别遍历这两个扁平对象,获取到每个扁平对象的属性值。通过分别比较这两个扁平对象的属性及对应的属性值,得到两个待比较对象的比较结果。通过本发明实施例中提供的数据处理方法,与传统比较两个 对象的方式相比,将遍历和比较分开,可以大大简化逻辑代码的复杂度,并可以避免因遗漏对比字段造成对比的不准确,在两个待比较对象不相同时,可以准确确定出二者的不同之处。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的一种数据处理方法的流程图;
图2是图1中步骤s110的流程图;
图3是图1中步骤s120的流程图;
图4是图1中步骤s130的流程图;
图5是图1中步骤s130的又一流程图;
图6是根据一示例性实施例示出的一种数据处理装置的结构示意图;
图7是图6中对象转换单元的示意图;
图8是图6中对象遍历单元的示意图;
图9是图6中比较单元的示意图;
图10是图6中比较单元的又一示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
由于采用传统方式在对两个对象比较时,通常同时对两个对象做深层遍历,发现不一致则返回比对不通过的结果。这种对象的比较方式实现代码非常复杂,容易出错,而且比较结果不直观,不能直接得出比较不通过的原因。
采用传统方式在比较两个对象时,往往也会导致如下问题:
1、由于采用边遍历一边比较的方式比较两个对象,使得代码逻辑复杂,很容易遗漏 比对字段造成比对不准确;
2、在要比较的对象层次较深或者需要比较的属性较多时,很难确定造成问题出现的原因;
3、在需要通过白名单该比较两个对象时,设置的白名单只能基于属性的字段名称来设置,如果一个对象的各个层次的属性里面有相同的字段名,而在这些属性里面有些是需要设置白名单,而有些又不需要设置白名单时,传统的比较两个对象的方式无法精确的控制白名单字段,而且没办法模糊匹配白名单。
为了解决在采用传统方式比较两个对象时带来的上述问题,本发明实施例首先提供了一种数据处理方法,如图1所示,该方法可以包括如下步骤:
在步骤s110中,在获取到两个待比较对象时,将两个待比较对象分别转换为两个扁平对象。
扁平对象(flatobject,简称fobject)是本发明自定义的一种数据类型。下面简要介绍下扁平对象的原理:
由于一个对象相当于一棵树,而对象的比较就相当于对象间属性的比较,对象中所需比较的属性就在树的叶子节点上。怎么做对象的比较,关键在于如何描述对象中的这些属性,而描述的关键信息就是属性的在这棵树中的路径信息。因此,在本发明提供的实施例中,将对象里面的所有属性及对应的路径信息都描述出来,并用一个map类型数据来保存这些描述,以及将属性对应的属性值保存到该map类型数据中。这样就可以基于对象中描述好了的属性比较两个对象。
扁平对象的本质是将复杂的对象层次化繁为简,简化为用一个表达式来描述,并用key-value的方式来保存。扁平对象的生成相当于一个对象序列化的过程,将对象中的属性信息(包括属性的路径信息)存放到map类型数据结构的key中,将属性值存放到value中。
因此,需要比较两个待对比对象时,实施例中将这两个待对比对象分别转换为本发明自定义的扁平
在步骤s120中,分别遍历两个扁平对象,得到每个扁平对象的属性和属性对应的属性值。
本发明实施例中在比较两个待对比对象时,将这两个待对比对象分别转换为两个扁平对象。将两个待对比对象的比较转换为两个扁平对象的比较,并且本发明实施例中在比较两个扁平对象的过程中,将遍历和比较分开,即先分别遍历两个扁平对象,然后再比较二者的属性及对应的属性值。
在遍历扁平对象的过程,相当于获取到所需扁平对象中的属性及对应的属性值。
在步骤s130中,分别比较两个扁平对象的属性和属性对应的属性值,得到比较结果。
在对两个扁平对象比较的过程,也是分别对两个扁平对象中属性及对应的属性值之间的比较。如果所需比较的属性在两个扁平对象中都存在,且二者相同属性对应的属性值相等,那么说明这两个扁平对象相同,也即两个待比较对象相同。否则,说明两个扁平对象不同,并给出两个扁平对象的不同之处。如,是否为两个扁平对象中某个扁平对象的属性不存在,或者在两个扁平对象的属性都存在时,其属性值不相等。
本发明提供的数据处理方法,在对两个待比较对象比较时,将这两个待比较分别转换为本发明自定义数据类型的扁平对象。然后分别遍历这两个扁平对象,获取到每个扁平对象的属性值。通过分别比较这两个扁平对象的属性及对应的属性值,得到两个待比较对象的比较结果。通过本发明实施例中提供的数据处理方法,与传统比较两个对象的方式相比,将遍历和比较分开,可以大大简化逻辑代码的复杂度,并可以避免因遗漏对比字段造成对比的不准确,在两个待比较对象不相同时,可以准确确定出二者的不同之处。
为了比较将两个待比较对象,需要将这两个带比较对象分别转换为两个扁平对象,因此,作为图1方法的细化,在本发明提供的又一实施例中,如图2所示,步骤s110还可以包括如下步骤:
在步骤s111中,分别获取两个待比较对象中属性的路径信息和属性值。
由于对象相当于树,而对象的属性为树上的叶子节点,通过路径信息可以在树上找到每个叶子节点,获取到对象的属性。并且由于每个属性对应一个属性值,为了更好的描述对象,方便对象之间的比较,那么需要将待比较对象中属性的路径信息及对应的属性值。
在步骤s112中,将每个待比较对象中属性的路径信息和属性值保存到map类型数据中,得到两个扁平对象。
扁平对象是本发明自定义的一种数据类型,在上述实施例中已经做出较为详细的阐述,这里不再赘述。其中,本发明实施例中自定义的扁平对象其本质是将复杂的对象层次化繁为简,简化为用一个表达式来描述,并用key-value的方式来保存,将对象中的属性信息(包括属性的路径信息)存放到map类型数据结构的key中,将属性值存放到value中,这样就得到扁平对象,相当于对待对比对象的重新描述,使得更方便对象之间的比较。
作为图1方法的细化,在本发明的另一实施例中,如图3所示,步骤s120还可以包括如下步骤:
在步骤s121中,获取每个扁平对象中属性的路径信息。
本发明实施例中在对两个扁平对象进行比较的过程中,是将遍历和比较分开,首先对扁平对象中的属性进行遍历,然后比较两个扁平对象的属性及属性对应的属性值。
因此,在对扁平对象进行遍历时,需要获取到扁平对象中的路径信息。
在步骤s122中,根据路径信息查找每个扁平对象中的属性及属性对应的属性值。
在获取到扁平对象中属性的路径信息之后,就可以根据路径信息查找到扁平对象中的属性及该属性对应的属性值。
作为图1方法的细化,在本发明的另一实施例中,如图4所示,步骤s130还可以包括如下步骤:
在步骤s131中,获取两个扁平对象中所需比较的预设属性。
由于扁平对象中一般有多个属性,而根据需要,对象之间可以不必全部进行属性比较,因此,获取需要比较的预设属性。其中,该预设属性可以为用户预先设定好的需要比较的属性。
在步骤s132中,在两个扁平对象中所需比较的预设属性均为非空时,判断两个扁平对象中预设属性对应的属性值是否对应相等。
由于会出现某一个或几个所需比较的属性在一个扁平对象中存在,而在另一个需要比较的扁平对象中不存在的现象。当所需比较的属性在扁平对象中不存在时,说明该预设属性在扁平对象中为空,反之若存在为非空。因此,在所需比较的预设属在所需比较的两个扁平对象中均为非空时,需要比较该预设属性分别在两个扁平对象中对应的属性值是否相等。
在步骤s133中,当两个扁平对象中的预设属性对应的属性值对应相等时,确定两个待比较对象相同。
如果两个扁平对象中的预设属性对应的属性值对应相等时,说明所需比较的属性都存在且对应的属性值均相等,那么说明这两个扁平对象相同,即两个需要比较的带比较对象相同。
作为图1方法的细化,在本发明的另一实施例中,如图5所示,步骤s130还可以包括如下步骤:
在步骤s134中,获取两个扁平对象中所需比较的预设属性。
由于扁平对象中一般有多个属性,而根据需要,对象之间可以不必全部进行属性比较,因此,获取需要比较的预设属性。其中,该预设属性可以为用户预先设定好的需要 比较的属性。
在步骤s135中,在两个扁平对象中的第一扁平对象中所需比较的预设属性值为空,且两个扁平对象中的第二扁平对象中所需比较的预设属性值为非空时,确定第一扁平对象中所需比较的属性值对应的预设属性不存在,第二扁平对象中所需比较的属性值对应的预设属性存在。
由于会出现某一个或几个所需比较的属性在一个扁平对象中存在,而在另一个需要比较的扁平对象中不存在的现象。当所需比较的属性在扁平对象中不存在时,说明该预设属性在扁平对象中为空,反之若存在为非空。因此,在所需比较的预设属在所需比较的两个扁平对象中有一个为空时,那么该预设属性在为空的扁平对象中对应的属性值也会不存在,这时就无需再比较其属性值,只需将属性在一扁平对象中为空的结果得出即可。
需要说明的是,两个扁平对象中的第一扁平对象和第二扁平对象只是为了区分两个扁平对象而已,可以根据需要,将其中任意个作为第一扁平对象,另一个作为第二扁平对象。
结合上述各实施例,在本发明提供的又一实施例中,以java为例来说明来个对象的比较:
表1
表2
其中,表1和表2分别定义了两个对象。即定义了paychannel类,paychannel类包含两个属性:paychanneltype为字符串类型,assetlist为一个asset类型的list(list可以理解为数组);asset类又包含两个属性:assetcode为字符串类型,assetids为字符串类型的list。
示例性的,两个paychannel对象要进行比较;
第一个paychannel对象(后面叫p1)包含的数据如下:
paychanneltype为"debit_express"
assetlist包含两个元素,第一个元素的数据:
assetcode为“abc”
assetids包含两个元素,分别是“abc123”和“abc456”
第二个元素的数据:
assetcode为“boc”
assetids包含两个元素,分别是“boc123”和“boc456”
第二个paychannel对象(后面叫p2)包含的数据如下:
paychanneltype为"debit_express"
assetlist只包含一个元素,元素的数据为:
assetcode为“icbc”
assetids包含两个元素,分别是“icbc123”和“icbc456”
p1转换为扁平对象后的key和value如下:
obj.paychanneltype="debit_express"
obj.assetlist[0].assetcode=“abc”
obj.assetlist[0].assetids[0]=“abc123”
obj.assetlist[0].assetids[1]=“abc456”
obj.assetlist[1].assetcode=“boc”
obj.assetlist[1].assetids[0]=“boc123”
obj.assetlist[1].assetids[1]=“boc456”
p2转换扁平对象后的key和value如下:
obj.paychanneltype="debit_express"
obj.assetlist[0].assetcode=“icbc”
obj.assetlist[0].assetids[0]=“icbc123”
obj.assetlist[0].assetids[1]=“icbc456”
因此,在对两个对象进行比较时,只需将其分别转换为扁平对象,分别比较两个扁平对象之间的属性和对应的属性值即可。即通过比较上述中的key和value即可。
本发明提供的数据处理方法,在对两个待比较对象比较时,将这两个待比较分别转换为本发明自定义数据类型的扁平对象。然后分别遍历这两个扁平对象,获取到每个扁平对象的属性值。通过分别比较这两个扁平对象的属性及对应的属性值,得到两个待比较对象的比较结果。通过本发明实施例中提供的数据处理方法,与传统比较两个对象的方式相比,将遍历和比较分开,可以大大简化逻辑代码的复杂度,并可以避免因遗漏对比字段造成对比的不准确,在两个待比较对象不相同时,可以准确确定出二者的不同之处。并且还可以根据用户的需要,设置需要进行比较的属性,如关键属性等,而不必将对象中所有的属性都进行比较,提高了比较效率。
通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:只读存储器(rom)、随机存取存储器(ram)、磁碟或者光盘等各种可以存储程序代码的介质。
另外,作为对上述各实施例的实现,本发明实施例还提供了一种数据处理装置,如图6所示,该装置包括:对象转换单元、对象遍历单元20和比较单元30,其中,
对象转换单元10,用于在获取到两个待比较对象时,将所述两个待比较对象分别转换为两个扁平对象;
对象遍历单元20,用于分别遍历所述两个扁平对象,得到每个扁平对象的属性和所述属性对应的属性值;
比较单元30,用于分别比较所述两个扁平对象的属性和所述属性对应的属性值,得到比较结果。
在本发明又一实施例中,基于图6,如图7所示,所述对象转换单元10,包括:
获取模块11,用于分别获取所述两个待比较对象中属性的路径信息和属性值;
保存模块12,用于将每个待比较对象中属性的路径信息和属性值保存到map类型数据中,得到所述两个扁平对象。
在本发明又一实施例中,基于图6,如图8所示,所述对象遍历单元20,包括:
路径信息获取模块21,用于获取每个扁平对象中属性的路径信息;
查找模块22,用于根据所述路径信息查找所述每个扁平对象中的属性及所述属性对应的属性值。
在本发明又一实施例中,基于图6,如图9所示,所述比较单元30,包括:
第一属性获取模块31,用于获取所述两个扁平对象中所需比较的预设属性;
判断模块32,用于在所述两个扁平对象中所需比较的预设属性均为非空时,判断所述两个扁平对象中所述预设属性对应的属性值是否对应相等;
第一确定模块33,用于在所述两个扁平对象中的所述预设属性对应的属性值对应相等时,确定所述两个待比较对象相同。
在本发明又一实施例中,基于图6,如图10所示,所述比较单元30,包括:
第二属性获取模块34,用于获取所述两个扁平对象中所需比较的预设属性;
第二确定模块35,在所述两个扁平对象中的第一扁平对象中所需比较的预设属性值为空,且所述两个扁平对象中的第二扁平对象中所需比较的预设属性值为非空时,确定所述第一扁平对象中所需比较的属性值对应的预设属性不存在,所述第二扁平对象中所需比较的属性值对应的预设属性存在。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本发明提供的数据处理装置,在对两个待比较对象比较时,将这两个待比较分别转换为本发明自定义数据类型的扁平对象。然后分别遍历这两个扁平对象,获取到每个扁平对象的属性值。通过分别比较这两个扁平对象的属性及对应的属性值,得到两个待比较对象的比较结果。通过本发明实施例中提供的数据处理方法,与传统比较两个对象的方式相比,将遍历和比较分开,可以大大简化逻辑代码的复杂度,并可以避免因遗漏对比字段造成对比的不准确,在两个待比较对象不相同时,可以准确确定出二者的不同之处。并且还可以根据用户的需要,设置需要进行比较的属性,如关键属性等,而不必将对象中所有的属性都进行比较,提高了比较效率。
可以理解的是,本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境 中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。