2017-08-02 42 views
0

是否有可能創建JSON可以反序列化的Java中的POJO類?將具有不定域的Json反序列化爲Java中的POJO

{ 
    "name": "value", 
    "random-value-01" : { 
     "constant-field-00":"value_00", 
     "constant-field-01":"value_01" 
    }, 
    "random-value-02" : { 
     "constant-field-00":"value_02", 
     "constant-field-01":"value_03" 
    }, 
    ... 
    "random-value-XX" : { 
     "constant-field-00":"value", 
     "constant-field-01":"value" 
    }, 
} 
+1

除非您願意使用地圖,否則不會。但我會質疑爲什麼你要首先像這樣格式化它。 –

回答

1

如果所有random-value-x一個JSONObjects具有相同的格式(即兩個常量字段是每個相同的),那麼你總是有一個類似於:

class RandomValue { 
    private final String constantField00; 
    private final String constantField01; 
    // ... Constructors, getters, etc. 
} 

class Pojo { 
    private final String name; 
    private final Map<String, RandomValue> randomValues; 
    // ... 
} 

如果他們排序(即它們都是相同random-value,像property-01property-02等),那麼你也可以有MapList(或Set等),您RandomValue元素。


如果,另一方面,constant-field s爲所有隨機密鑰,以及,那麼你可能堅持與更多的東西一樣:

class Pojo { 
    private final String name; 
    private final Map<String, Map<String, String>> additionalInfo; 
    // ... 
} 

哪裏的鑰匙additionalInfoMap是您的random-value-x s,並且這些值是String密鑰(constant-field-0x s)至String值(value s)的Map

0

這不是一個答案,但可能激起人們對一般話題的興趣。

對於那些對JSON採用不同方法感興趣的人,可以查看國際電聯的ASN.1。把它看作有點像谷歌協議緩衝區,但有一個不同的線路格式(包括JSON,XML和整個負載的二進制線格式,具有不同的屬性)的整個負載。基本上,每種場合和目的都有一個線路格式。

有時這可能非常有用。如果你想要在分佈式系統和部分系統上傳輸數據,比如在低帶寬無線鏈路末端的微控制器上使用C,而其他部分是服務器上的Java,那麼你可以包含所有的系統在單個模式中進行消息傳遞(它充當單一事實點)。從這裏你可以(取決於你使用的工具)用C,C++,Java,C#,甚至ADA,VHDL生成普通的舊對象。 Python是一個值得注意的省略(有些Python模塊可以執行代碼優先的ASN1,這是沒有意義的)。

JSON作爲有線格式的使用是該標準的一個相對新近的補充,但一些商業工具支持它。對於那些真正需要它的人來說,它可能是一個非常有用的工具。

從這個特定問題的角度來看,ASN.1和支持JSON作爲有線格式的工具沒有用處;你不能使用任意的JSON並自動生成可以編譯爲類的模式。在一個全新的項目中,如果您希望使其他語言/平臺能夠輕鬆地使用或生成數據,那麼它的用處何在。

我已經找過體面的C#類生成器,它們使用JSON模式;不幸的是,在那裏最好的一個沒有處理oneof。然而,我用於ASN.1(具有等效的CHOICE)的工具確實會在C#,Java,C/C++中生成完整的類。所以我處在這種有趣的情況下,我有一個ASN.1模式(在這個特定的項目中)編譯爲C#和C,它處理JSON,XML和二進制連線格式。生成的類足夠智能,可以進行自己的驗證 - 我不必通過JSON模式驗證程序來傳遞JSON。

JSON模式和ASN.1模式在可以放入規範的細節方面大致相當。同樣,ASN.1模式和XSD XML模式也大致相同(即使是兩種語言之間的官方標準翻譯)。我所看到的使用ASN.1模式而不是JSON或XSD模式的好處是,這些工具(特別是商業工具)似乎比通常與JSON和XSD模式相關的類生成器(例如Microsoft的xsd)更加徹底。 exe吸)。這對系統集成,維護以及數據定義的靈活性等都有着積極的好處。

相關問題