2014-03-12 87 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([)。

...尴尬...