本發明涉及數據處理技術領域,尤其涉及一種反序列化方法及裝置。
背景技術:
如今的編程世界中,有很多需要將Json(JavaScript Object Notation,輕量級的數據交換格式)文檔反序列化為強類型實體的需求。其中,Json文檔是基于JavaScript編程語言標準的一種輕量級的數據交換格式,主要用于跟服務器進行交換數據。而Json端的設計往往會采用JsonPatch規則,JsonPatch規則采用的是基準和delta的方式來定義Json文檔內容,所以要想將Json文檔反序列化為強類型實體,則需要將JsonPatch規則下的Json文檔轉換為強類型實體。
目前,將Json文檔反序列化為強類型實體,則首先需要解析Json文檔中的Patch路徑,而在對Patch路徑進行解析的時候,對Patch路徑中的每個路徑部件要么當做強類型屬性,要么當做數組下標,而且數組下標只能應用于實現IList接口的強類型屬性,因此現有的Json文檔反序列化做法無法支持字典,從而現有的反序列化方法的反序列效率低。
技術實現要素:
鑒于上述問題,提出了本發明,以便提供一種克服上述問題或者至少部分地解決上述問題的反序列化方法及裝置。
為達到上述目的,本發明主要提供如下技術方案:
一方面,本發明實施例提供了一種反序列化方法,該方法包括:
將Json文檔轉換為強類型實體;
根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件,所述路徑組件是按照順序從所述Json文檔的路徑中提取的;
根據所述遍歷結果獲取最后一個路徑組件對應的運行類型;
若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。
另一方面,本發明實施例還提供一種反序列化裝置,該裝置包括:
轉換單元,用于將Json文檔轉換為強類型實體;
遍歷單元,用于根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件,所述路徑組件是按照順序從所述Json文檔的路徑中提取的;
獲取單元,用于根據所述遍歷結果獲取最后一個路徑組件對應的運行類型;
確定單元,用于若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。
借由上述技術方案,本發明實施例提供的技術方案至少具有下列優點:
本發明實施例提供了一種反序列化方法及裝置,首先將Json文檔轉換為強類型實體,然后根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件,所述路徑組件是按照順序從所述Json文檔的路徑中提取的,再根據所述遍歷結果獲取最后一個路徑組件對應的運行類型,若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。與目前反序列化方法無法支持反序列化字典相比,本發明實施例首先將Json文檔轉換為強類型實體,然后根據所述強類型實體順序遍歷與所述Json文檔對應的各個路徑組件,再根據所述遍歷結果獲取最后一個路徑組件對應的運行類型,若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作,本發明嘗試將路徑組件當做字典鍵,從而在Json文檔的路徑就可以加入字典的功能,進而本發明可以支持反序列化字典。
附圖說明
通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優選實施方式的目的,而并不認為是對本發明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1為本發明實施例提供的一種反序列化方法流程圖;
圖2為本發明實施例提供的另一種反序列化方法流程圖;
圖3為本發明實施例提供的一種反序列化裝置的組成框圖;
圖4為本發明實施例提供的另一種反序列化裝置的組成框圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
為使本發明技術方案的優點更加清楚,下面結合附圖和實施例對本發明作詳細說明。
本發明實施例提供了一種反序列化方法,如圖1所示,所述方法包括:
S101、將Json文檔轉換為強類型實體。
對于本發明實施例,所述Json文檔使用了JsonPatch規則規范Json文檔的內容,故Json文檔被分為基準部分和delta部分。其中,JsonPatch是一個用來描述Json文檔變化的格式,它本身也是Json文檔,JsonPatch可與HTTP PATCH method合并使用,JsonPatch包括多種編程語言的實現。所述強類型實體是為所有變量指定數據類型,在本發明中可以通過JsonConverter(Json轉換器)等類將Json文檔中的基準部分和delta(路徑操作)部分分別轉換為強類型實體,即可以通過JsonConverter將Json文檔轉換為Java對象。
例如,在下述Json文檔中,Case括號中的內容為Json文檔的基準部分,Patch括號中的內容為Json文檔的delta部分,即Json文檔中具體的op操作部分。
在本發明實施例中,可以通過JsonConverter等類將Json文檔中的基準部分轉換為強類型實體,具體轉換的結果如下所示:
S102、根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件。
其中,所述路徑組件是按照順序從所述Json文檔的路徑中提取的,所述Json文檔的路徑為delta部分中的路徑,所述路徑表示需要進行操作數據對應的路徑。例如,所述路徑具體可以為“PropertyA\2\PropertyB\KeyA”。需要說明的是,本發明將delta部分中的路徑根據符號“\”進行分解提取出多個路徑組件,并將這些分解的路徑組件按順序的存儲在一個數組中,例如,對上述的路徑按照符號“\”可分解成四個路徑組件,分別為:PropertyA、2、PropertyB和KeyA,然后將這些路徑組件按順序的存儲到一個數組當中,如通過數組arry存儲上述路徑具體可以如下所示:arry[0]=PropertyA,arry[1]=2,arry[2]=PropertyB,arry[3]=KeyA。
對于本發明實施例,順序遍歷與所述Json文檔對應的各個路徑組件具體可以如下:首先通過存儲路徑組件的數組獲取第一個路徑組件,然后定義一個變量O。對第一個路徑組件做如下操作:首先判斷第一個路徑組件的數據類型,若第一個路徑組件是數字,則通過調用GetType(獲取類型)方法獲取第一個路徑組件實際運行時的類型,如果該類型實現IList(可按照索引單獨訪問的對象的非泛型集合)接口,則將變量O看做數組對象,并以路徑組件為下標,取出相應元素,該元素存入變量O,如不能實現IList接口,則拋出異常;若第一個路徑組件不是數字,則對變量O調用GetType獲取其實際運行時的類型,如第一路徑組件的類型實現了IDictionary<string,object>(字典)接口,則將變量O顯式轉換為IDictionary<string,object>(字典)類型,并以路徑組件為key,取出相應元素,該元素存入變量O;如不實現IDictionary<string,object>接口,則運用反射相關API分析變量O的運行時類型的屬性,如路徑組件匹配某一屬性, 則對該屬性調用GetValue獲得屬性值,該屬性值記錄到變量O中,如果路徑組件不匹配任一屬性,則拋出異常。在遍歷第一個路徑組件之后,根據更改的變量O的內容,繼續遍歷后一個路徑組件,以此類推直到遍歷除了最后一個路徑組件的所有路徑組件。
S103、根據所述遍歷結果獲取最后一個路徑組件對應的運行類型。
其中,所述最后一個路徑組件可以為數字、屬性、字典等運行類型,本發明實施例不做具體限定。例如,Json文檔中的Delta部分的路徑示例為:PropertyA\2\PropertyB\KeyA,Json文檔中Delta部分的op示例:Op:add,value:“value”。則首先將路徑分解成多個路徑組件的形式,然后對第一個路徑組件PropertyA進行遍歷,若第一個路徑組件PropertyA為數組,則變量O的值更改為數組類型;然后遍歷第二個路徑組件2,由于第二個路徑組件是數字,因此將變量O看做數組對象,并以第二個路徑組件2為下標,取出PropertyA[2]中的元素,將PropertyA[2]對應的元素存入變量O;接著遍歷第三個路徑組件PropertyB,通過對變量O調用GetType獲取路徑組件PropertyB實際運行時類型,若第三個路徑組件PropertyB實現了IDictionary<string,object>接口,則將變量O轉換為IDictionary<string,object>類型,并以路徑組件為key,取出相應元素,該元素存入變量O。順序遍歷路徑組件PropertyA、2和PropertyB之后,通過對變量O調用GetType獲取最后一個路徑組件KeyA實際運行時的類型,在本例中最后一個路徑組件對應的類型為字典,因此根據op字段的操作內容對KeyA進行操作,最終得到的結果是PropertyA[2].PropertyB[KeyA]=value。
在本發明實施例中,對各個路徑組件進行層層遍歷,可以找到最后一個路徑組件所對應的運行類型以及最后一個路徑組件的從屬關系,從而根據op字段的操作內容可對最后一個路徑組件做相應的操作。
S104、若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。
對于本發明實施例,在順序遍歷除了最后一個路徑組件的各個路徑組件之后,對最后一個路徑組件進行判斷,如果最后一個路徑組件不是數字, 則對變量O調用GetType方法獲取最后一個路徑組件實際運行時的類型,如果變量O的類型實現了IDictionary<string,object>接口,則將變量O看做字典,并以最后一個路徑組件為key,根據Json文檔中的delta部分的op字段,相應的為該字典的該key位置做相應操作(賦值、刪除或更替等操作);如果變量O的不能夠實現IDictionary<string,object>接口,則運用反射相關API分析變量O的運行時類型的屬性,如路徑組件匹配某一屬性,根據Json文檔中的delta部分的op字段,對該屬性做相應操作(如調用SetValue賦值,或設為null,甚至移動等更復雜操作)。
對于本發明實施例,如果最后一個路徑組件是數字,則對變量O調用GetType獲取最后一個路徑組件實際運行時的類型,如果最后一個路徑組件的類型能夠實現IList接口,則將變量O看做數組對象,并以路徑組件為下標,根據Json文檔中的delta部分的op字段,相應的為該數組的該下標位置做相應操作(賦值、刪除或更替等操作)。
需要說明的是,Json文檔中的delta部分的op字段具體可以有替換、增加、賦值、刪除等操作,本發明實施例不做具體限定。
例如,Json文檔中的基準部分如下所示:
則通過delta部分的op字段對Json文檔中的基準部分進行操作后,結果如下所示:
本發明實施例提供了一種反序列化方法,首先將Json文檔轉換為強類型實體,然后根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件,所述路徑組件是按照順序從所述Json文檔的路徑中提取的,再根據所述遍歷結果獲取最后一個路徑組件對應的運行類型,若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。與目前反序列化方法無法支持反序列化字典相比,本發明實施例首先將Json文檔轉換為強類型實體,然后根據所述強類型實體順序遍歷與所述Json文檔對應的各個路徑組件,再根據所述遍歷結果獲取最后一個路徑組件對應的運行類型,若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作,本發明嘗試將路徑組件當做字典鍵,從而在Json文檔的路徑就可以加入字典的功能,進而本發明可以支持反序列化字典。
本發明實施例提供了另一種反序列化方法,如圖2所示,所述方法包括:
S201、將Json文檔轉換為強類型實體。
對于本發明實施例,所述Json文檔使用了JsonPatch規則規范Json文檔的內容,故Json文檔被分為基準部分和delta部分。其中,JsonPatch是一個用來描述Json文檔變化的格式,它本身也是Json文檔,JsonPatch可與HTTP PATCH method合并使用,JsonPatch包括多種編程語言的實現。所述強類型實體是為所有變量指定數據類型,在本發明中可以通過JsonConverter等類將Json文檔中的基準部分和delta部分分別轉換為強類型實體,即可以通過JsonConverter將Json文檔轉換為Java對象。
S202、定義一個變量。
其中,所述變量的初始值為所述強類型實體,所述變量用于記錄所述路徑組件從屬于的對象。例如,可以通過變量O記錄路徑組件從屬于哪個 對象,變量的初始值為步驟S201中轉化而來的強類型實體。需要說明的是,由于Json文檔中的路徑部分是按級遞進的關系,因此需在通過定義一個變量實現逐級獲取最后一個路徑組件的類型。
S203、根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件。
其中,所述路徑組件是按照順序從所述Json文檔的路徑中提取的,所述Json文檔的路徑為delta部分中的路徑,所述路徑表示需要進行操作數據對應的路徑。例如,所述路徑具體可以為“PropertyA\2\PropertyB\KeyA”。需要說明的是,本發明將delta部分中的路徑根據符號“\”進行分解提取出多個路徑組件,并將這些分解的路徑組件按順序的存儲在一個數組中,例如,對上述的路徑按照符號“\”可分解成四個路徑組件,分別為:PropertyA、2、PropertyB和KeyA,然后將這些路徑組件按順序的存儲到一個數組當中,如通過數組arry存儲上述路徑具體可以如下所示:arry[0]=PropertyA,arry[1]=2,arry[2]=PropertyB,arry[3]=KeyA。
對于本發明實施例,所述順序遍歷與所述Json文檔對應的各個路徑組件包括:若除所述最后一個路徑組件的路徑組件中的任一路徑組件為數字,則通過獲取所述變量的類型確定數字路徑組件的運行類型;判斷所述數字路徑組件的運行類型是否能夠實現IList接口;若能,則以所述數字路徑組件為數組下標,取出相應數組元素存儲到所述變量中。在本發明實施例中,若第一個路徑組件是數字,則通過調用GetType方法獲取第一個路徑組件實際運行時的類型,如果該類型實現IList接口,則將變量O看做數組對象,并以路徑組件為下標,取出相應元素,該元素存入變量O,如不能實現IList接口,則拋出異常。
對于本發明實施例,所述順序遍歷與所述Json文檔對應的各個路徑組件還包括:若除所述最后一個路徑組件的路徑組件中的任一路徑組件不是數字,則通過獲取所述變量的類型確定非數字路徑組件的運行類型;判斷所述非數字路徑組件的運行類型是否能夠實現IDictionary接口;若能,則以所述非數字路徑組件為鍵,取出相應字典元素存儲到所述變量中。在本發明實施例中,若第一個路徑組件不是數字,則對變量O調用GetType獲 取其實際運行時的類型,如該類型實現了IDictionary<string,object>接口,則將變量O轉換為IDictionary<string,object>類型,并以路徑組件為key,取出相應元素,該元素存入變量O;如不實現IDictionary<string,object>接口,則運用反射相關API分析變量O的運行時類型的屬性,如路徑組件匹配某一屬性,則對該屬性調用GetValue獲得屬性值,該屬性值記錄到變量O中,如果路徑組件不匹配任一屬性,則拋出異常。再遍歷第一個路徑組件之后,根據更改的變量O的內容,繼續變量后一個路徑組件,以此類推直到遍歷除了最后一個路徑組件的所有路徑組件。
S204、根據所述遍歷結果獲取最后一個路徑組件對應的運行類型。
對于本發明實施例,所述通過所述遍歷結果獲取最后一個路徑組件對應的運行類型包括:在順序遍歷除所述最后一個路徑組件的路徑組件之后,通過獲取所述變量的類型確定所述最后一個路徑組件對應的運行類型。其中,所述最后一個路徑組件可以為數字、屬性、字典等運行類型,本發明實施例不做具體限定。例如,Json文檔中的Delta部分的路徑示例為:PropertyA\2\PropertyB\KeyA,Json文檔中Delta部分的op示例:Op:add,value:“value”。則首先將路徑分解成多個路徑組件的形式,然后對第一個路徑組件PropertyA進行遍歷,若第一個路徑組件PropertyA為數組,則變量O的值更改為數組類型;然后遍歷第二個路徑組件2,由于第二個路徑組件是數字,因此將變量O看做數組對象,并以第二個路徑組件2為下標,取出PropertyA[2]中的元素,將PropertyA[2]對應的元素存入變量O;接著遍歷第三個路徑組件PropertyB,通過對變量O調用GetType獲取路徑組件PropertyB實際運行時類型,若第三個路徑組件PropertyB實現了IDictionary<string,object>接口,則將變量O轉換為IDictionary<string,object>類型,并以路徑組件為key,取出相應元素,該元素存入變量O。順序遍歷路徑組件PropertyA、2和PropertyB之后,通過對變量O調用GetType獲取最后一個路徑組件KeyA實際運行時的類型,在本例中最后一個路徑組件對應的類型為字典,因此根據op字段的操作內容對KeyA進行操作,最終得到的結果是PropertyA[2].PropertyB[KeyA]=value。
S205、若所述最后一個路徑組件的運行類型為字典,則將所述最后一 個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。
對于本發明實施例,在順序遍歷除了最后一個路徑組件的各個路徑組件之后,對最后一個路徑組件進行判斷,如果最后一個路徑組件不是數字,則對變量O調用GetType方法獲取最后一個路徑組件實際運行時的類型,如果變量O的類型實現了IDictionary<string,object>接口,則將變量O看做字典,并以最后一個路徑組件為key,根據Json文檔中的delta部分的op字段,相應的為該字典的該Key位置做相應操作(賦值、刪除或更替等操作);如果變量O的不能夠實現IDictionary<string,object>接口,則運用反射相關API分析變量O的運行時類型的屬性,如路徑組件匹配某一屬性,根據Json文檔中的delta部分的op字段,對該屬性做相應操作(如調用SetValue賦值,或設為null,甚至移動等更復雜操作)。
對于本發明實施例,如果最后一個路徑組件是數字,則對變量O調用GetType獲取最后一個路徑組件實際運行時的類型,如果最后一個路徑組件的類型能夠實現IList接口,則將變量O看做數組對象,并以路徑組件為下標,根據Json文檔中的delta部分的op字段,相應的為該數組的該下標位置做相應操作(賦值、刪除或更替等操作)。
本發明實施例提供了另一種反序列化方法,首先將Json文檔轉換為強類型實體,然后根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件,所述路徑組件是按照順序從所述Json文檔的路徑中提取的,再根據所述遍歷結果獲取最后一個路徑組件對應的運行類型,若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。與目前反序列化方法無法支持反序列化字典相比,本發明實施例首先將Json文檔轉換為強類型實體,然后根據所述強類型實體順序遍歷與所述Json文檔對應的各個路徑組件,再根據所述遍歷結果獲取最后一個路徑組件對應的運行類型,若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作,本發明嘗試將路徑組件當做字典鍵,從而在Json 文檔的路徑就可以加入字典的功能,進而本發明可以支持反序列化字典。
進一步地,本發明實施例提供一種反序列化裝置,如圖3所示,所述裝置包括:轉換單元31、遍歷單元32、獲取單元33、確定單元34。
轉換單元31,用于將Json文檔轉換為強類型實體。
遍歷單元32,用于根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件,所述路徑組件是按照順序從所述Json文檔的路徑中提取的。
獲取單元33,用于根據所述遍歷結果獲取最后一個路徑組件對應的運行類型。
確定單元34,用于若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。
需要說明的是,本發明實施例提供的一種反序列化裝置所涉及各功能單元的其他相應描述,可以參考圖1所示方法的對應描述,在此不再贅述,但應當明確,本實施例中的裝置能夠對應實現前述方法實施例中的全部內容。
本發明實施例提供了一種反序列化裝置,首先將Json文檔轉換為強類型實體,然后根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件,所述路徑組件是按照順序從所述Json文檔的路徑中提取的,再根據所述遍歷結果獲取最后一個路徑組件對應的運行類型,若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。與目前反序列化方法無法支持反序列化字典相比,本發明實施例首先將Json文檔轉換為強類型實體,然后根據所述強類型實體順序遍歷與所述Json文檔對應的各個路徑組件,再根據所述遍歷結果獲取最后一個路徑組件對應的運行類型,若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作,本發明嘗試將路徑組件當做字典鍵,從而在Json文檔的路徑就可以加入字典的功能,進而本發明可以支持反序列化字典。
進一步地,本發明實施例提供另一種反序列化裝置,如圖4所示,所述裝置包括:轉換單元41、遍歷單元42、獲取單元43、確定單元44。
轉換單元41,用于將Json文檔轉換為強類型實體。
遍歷單元42,用于根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件,所述路徑組件是按照順序從所述Json文檔的路徑中提取的。
獲取單元43,用于根據所述遍歷結果獲取最后一個路徑組件對應的運行類型。
確定單元44,用于若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。
進一步地,所述裝置還包括:
定義單元45,用于定義一個變量,所述變量的初始值為所述強類型實體,所述變量用于記錄所述路徑組件從屬于的對象。
進一步地,所述遍歷單元42包括:
確定模塊421,若除所述最后一個路徑組件的路徑組件中的任一路徑組件為數字,則通過獲取所述變量的類型確定數字路徑組件的運行類型。
判斷模塊422,用于判斷所述數字路徑組件的運行類型是否能夠實現IList接口。
存儲模塊423,用于若所述數字路徑組件的運行類型能夠實現IList接口,則以所述數字路徑組件為數組下標,取出相應數組元素存儲到所述變量中。
確定模塊421,還用于若除所述最后一個路徑組件的路徑組件中的任一路徑組件不是數字,則通過獲取所述變量的類型確定非數字路徑組件的運行類型。
判斷模塊422,還用于判斷所述非數字路徑組件的運行類型是否能夠實現IDictionary接口。
存儲模塊423,還用于若述非數字路徑組件的運行類型能夠實現IDictionary接口,則以所述非數字路徑組件為鍵,取出相應字典元素存儲到 所述變量中。
所述獲取單元43,具體用在順序遍歷除所述最后一個路徑組件的路徑組件之后,通過獲取所述變量的類型確定所述最后一個路徑組件對應的運行類型。
需要說明的是,本發明實施例提供的一種反序列化裝置所涉及各功能單元的其他相應描述,可以參考圖2所示方法的對應描述,在此不再贅述,但應當明確,本實施例中的裝置能夠對應實現前述方法實施例中的全部內容。
本發明實施例提供了另一種反序列化裝置,首先將Json文檔轉換為強類型實體,然后根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件,所述路徑組件是按照順序從所述Json文檔的路徑中提取的,再根據所述遍歷結果獲取最后一個路徑組件對應的運行類型,若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。與目前反序列化方法無法支持反序列化字典相比,本發明實施例首先將Json文檔轉換為強類型實體,然后根據所述強類型實體順序遍歷與所述Json文檔對應的各個路徑組件,再根據所述遍歷結果獲取最后一個路徑組件對應的運行類型,若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作,本發明嘗試將路徑組件當做字典鍵,從而在Json文檔的路徑就可以加入字典的功能,進而本發明可以支持反序列化字典。
所述反序列化裝置包括處理器和存儲器,上述轉換單元、遍歷單元、獲取單元、確定單元和定義單元等均作為程序單元存儲在存儲器中,由處理器執行存儲在存儲器中的上述程序單元來實現相應的功能。
處理器中包含內核,由內核去存儲器中調取相應的程序單元。內核可以設置一個或以上,通過調整內核參數來實現反序列化字典。
存儲器可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內存等形式,如只讀存儲器(ROM)或閃存(flash RAM),存儲器包括至少一個存儲芯片。
本申請還提供了一種計算機程序產品,當在數據處理設備上執行時,適于執行初始化有如下方法步驟的程序代碼:將Json文檔轉換為強類型實體;根據所述強類型實體,順序遍歷與所述Json文檔對應的各個路徑組件,所述路徑組件是按照順序從所述Json文檔的路徑中提取的;根據所述遍歷結果獲取最后一個路徑組件對應的運行類型;若所述最后一個路徑組件的運行類型為字典,則將所述最后一個路徑組件確定成所述字典的鍵,根據所述Json文檔中的操作內容對所述字典的鍵做相應操作。
本領域內的技術人員應明白,本申請的實施例可提供為方法、系統、或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
本申請是參照根據本申請實施例的方法、設備(系統)、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的 功能的步驟。
在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、網絡接口和內存。
存儲器可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。存儲器是計算機可讀介質的示例。
計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現信息存儲。信息可以是計算機可讀指令、數據結構、程序的模塊或其他數據。計算機的存儲介質的例子包括,但不限于相變內存(PRAM)、靜態隨機存取存儲器(SRAM)、動態隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術、只讀光盤只讀存儲器(CD-ROM)、數字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質,可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括暫存電腦可讀媒體(transitory media),如調制的數據信號和載波。
以上僅為本申請的實施例而已,并不用于限制本申請。對于本領域技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內所作的任何修改、等同替換、改進等,均應包含在本申請的權利要求范圍之內。