本發明涉及信息技術領域,尤其涉及一種數據處理方法及裝置。
背景技術:
在開發測試過程中,開發人員經常需要將兩個對象進行對比,以確定這兩個對象是否一致。然而,傳統方式在對比兩個對象時,通常是同時對兩個對象做深層遍歷,在這兩個對象不一致時,返回對比結果。在采用傳統方式對兩個對象進行對比時,由于傳統方式一般是邊遍歷邊比較,使得代碼邏輯復雜,很容易遺漏兩個對比對象的對比字段,造成對比結果的不準確。
技術實現要素:
為克服相關技術中存在的問題,本發明提供一種數據處理方法及裝置。
根據本發明實施例的第一方面,提供一種數據處理方法,包括:
在獲取到兩個待比較對象時,將所述兩個待比較對象分別轉換為兩個扁平對象;
分別遍歷所述兩個扁平對象,得到每個扁平對象的屬性和所述屬性對應的屬性值;
分別比較所述兩個扁平對象的屬性和所述屬性對應的屬性值,得到比較結果。
根據本發明實施例的第二方面,提供一種數據處理裝置,包括:
對象轉換單元,用于在獲取到兩個待比較對象時,將所述兩個待比較對象分別轉換為兩個扁平對象;
對象遍歷單元,用于分別遍歷所述兩個扁平對象,得到每個扁平對象的屬性和所述屬性對應的屬性值;
比較單元,用于分別比較所述兩個扁平對象的屬性和所述屬性對應的屬性值,得到比較結果。
本發明的實施例提供的技術方案可以包括以下有益效果:
本發明提供的數據處理方法及裝置,在對兩個待比較對象比較時,將這兩個待比較分別轉換為本發明自定義數據類型的扁平對象。然后分別遍歷這兩個扁平對象,獲取到每個扁平對象的屬性值。通過分別比較這兩個扁平對象的屬性及對應的屬性值,得到兩個待比較對象的比較結果。通過本發明實施例中提供的數據處理方法,與傳統比較兩個 對象的方式相比,將遍歷和比較分開,可以大大簡化邏輯代碼的復雜度,并可以避免因遺漏對比字段造成對比的不準確,在兩個待比較對象不相同時,可以準確確定出二者的不同之處。
應當理解的是,以上的一般描述和后文的細節描述僅是示例性和解釋性的,并不能限制本發明。
附圖說明
此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本發明的實施例,并與說明書一起用于解釋本發明的原理。
圖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、小型計算機、大型計算機、包括以上任何系統或設備的分布式計算環境等等。
本發明可以在由計算機執行的計算機可執行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執行特定任務或實現特定抽象數據類型的例程、程序、對象、組件、數據結構等等。也可以在分布式計算環境中實踐本發明,在這些分布式計算環境 中,由通過通信網絡而被連接的遠程處理設備來執行任務。在分布式計算環境中,程序模塊可以位于包括存儲設備在內的本地和遠程計算機存儲介質中。
需要說明的是,在本文中,諸如“第一”和“第二”等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
本領域技術人員在考慮說明書及實踐這里公開的發明后,將容易想到本發明的其它實施方案。本申請旨在涵蓋本發明的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本發明的一般性原理并包括本發明未公開的本技術領域中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本發明的真正范圍和精神由下面的權利要求指出。
應當理解的是,本發明并不局限于上面已經描述并在附圖中示出的精確結構,并且可以在不脫離其范圍進行各種修改和改變。本發明的范圍僅由所附的權利要求來限制。