2014-03-12 117 views
2

如何使用Gson反序列化列表清單?GSON列表清單

例如,給出以下JSON字符串:

{ 
    vars: [ 
    [ 1, 2, 3 ], 
    [ 4, 5 ] 
    ] 
} 

我可以創建以下兩個POJO的嘗試和反序列化:

class ThisDoesNotWork { 
    public List<List<Integer>> vars; 
} 

運行gson.fromJson(jsonStr, ThisDoesNotWork.class);拋出一個com.google.gson.JsonSyntaxException

但接下來的工作(雖然它不是十分有用):

class ThisWorks { 
    public List<Object> vars; 
} 

如果我附上一個調試器的gson.fromJson(jsonStr, ThisWorks.class);輸出,我可以看到,反序列化vars對象包含:

vars = {java.util.ArrayList}, size = 2 
|-- [0] = {java.util.ArrayList}, size = 3 
    |-- [0] = {java.lang.Integer}, value = 1 
    |-- [1] = {java.lang.Integer}, value = 2 
    |-- [2] = {java.lang.Integer}, value = 3 
|-- [1] = {java.util.ArrayList}, size = 2 
    |-- [0] = {java.lang.Integer}, value = 4 
    |-- [1] = {java.lang.Integer}, value = 5 

所以我的問題是,我如何正確使用Gson反序列化列表清單?

+1

請注意,這不是列表的列表,它是列表的列表的地圖。 –

+0

是的,這是(或多或少)我的代碼中的問題。謝謝:) – jkgeyti

+0

如果你真的想從它的列表中,它創建一個POJO是一種愚蠢的。 –

回答

1

這是我的一個簡單的錯誤。

class ThisDoesWorkAfterAll { 
    public List<List<Integer>> vars; 
} 

反序列化JSON的正確方法。在我的數據中,我只是有一個額外的列表級別。如果遇到同樣的問題,請檢查GSON是否告訴您期望「您的類型」(例如Integer),但看到START_ARRAY([)。

...尷尬...