2016-10-22 101 views
1

我有JSON是這樣的:GSON反序列化/序列化已未定鍵的名稱的JSON字符串

# "trig_cond": { 
#  "_and": { 
#    "param1": ["op", "value1"], 
#    "param2": ["op", "value2"], ... 
#  }, 
#  "_or": { 
#    "param1": ["op", "value1"], 
#    "param2": ["op", "value2"], ... 
#  } 
# } 

的「_and」 /「_或」部分具有按鍵數目不詳的映射列出對象(每個包含兩個項目)。 如何反序列化成java對象?我已經看過各種自定義的反序列化選項,但我不明白如何爲此示例執行json。

回答

1

根據您的要求,您可以選擇幾種不同的選項。當你有一個未知數的鍵時,你可以採用的最簡單的解決方案之一就是簡單地將POJO的這些部分作爲JSONObject。

例如,這個POJO會滿足您的要求,將JSON反序列化爲一個java對象,並且仍然提供您以後的靈活性。

public class SamplePojo { 
    TrigCond trig_cond; 

    public static class TrigCond { 
     JsonObject _and; 
     JsonObject _or; 
    } 
} 

如果您願意,也可以將它們分成不同的文件。

而且,因爲在你的榜樣,你知道包含這些param1param2數組元素是什麼類型的值,可以轉而使用Map

這裏是一個你可能更喜歡另外一個例子:

public class SamplePojo { 
    TrigCond trig_cond; 

    public static class TrigCond { 
     Map<String, String[]> _and; 
     Map<String, String[]> _or; 
    } 
} 

讓我知道如果我正確理解你的問題!