============================
原创,转载请指明出处(http://blog.xinspace.xin)。
参考:is it possible to use Gson.fromJson() to get ArrayList<ArrayList
Gson在解析JSON格式字符串的时候,可以自定义Token把JSON格式字符串解析成某个类。比如下面的这段JSON字符串:1
2
3
4
5
6
7
8
9
10
11
12{
status: 200
error_msg: null
data: [
{
param1: "xxx"
param2: "xxx"
},
//下面有多个json对象,这里省略了
......
]
}
这段JSON格式的字符串可以定义如下的类来对应:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19/**
* 外层包裹
*/
public class RetModule {
public int status;
public String error_msg;
public ArrayList<DataModule> data;
}
/**
* 内部的列表数据
*/
public class DataModule {
public String param1;
public String param2;
}
其中RetModule
类是包裹在外层的类,保存JSON字符串的status
等字段,而DataModule
类是真正的数据,保存数组中的每个元素。
那么要把JSON数组data
映射为ArrayList
,就可以通过自定义Token来完成,代码如下:1
ArrayList<DataModule> data = gson.fromJson(jsonString, new TypeToken<ArrayList<DataModule>>() {}.getType());
这段代码中,取出了ArrayList<DataModule>
类的类型,然后Gson就把相应的JSON数组转换成这个自定义的类型。
同样的,可以用TypeToken1
[["John","25"],["Peter","37"]];
需要两层列表,外面一层包含两个列表元素,而这两个列表元素又分别包含两个元素。可以把上面的字符串映射为ArrayList<ArrayList1
ArrayList<ArrayList<String>> list = gson.fromJson(jsonString, new TypeToken<ArrayList<ArrayList<String>>>() {}.getType());