文章目录
  1. 1. 解析Map型的Json数据

解析Map型的Json数据

Json数据

之前在做一个地址解析的时候遇到了这种类型的json数据,当时头疼了好一阵,因为这不是常见的Json格式。我们常见的要么是一个对象,里面若干数组;要么是若干数组,里面是Json对象等。但是这个Json看起来却全部都是对象,用Android的org.json竟无法解析。

冷静下来,仔细分析一下。在在线解析器中可以正常解析,说明这段数据是正常可以解析的。这是想到了Gson这个强大的工具。再来看看数据的组成结构。如果把最里层的数据des和code看做是一个Model的话(本来就是),那么区级地址的结构就变成了一个类型为的map,市级地址中又是一个的map,而这个Model2则是一个包含了code,des和Model1的市级Model,剩下的也是同理。

思路理清后,可以开始写代码了,其实也就几行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
    public class AreaModeal implements Serializable {
private static final long serialVersionUID = 4686973902095925495L;

private String code;
private String des;
private Map<String, City> map;

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getDes() {
return des;
}

public void setDes(String des) {
this.des = des;
}

public Map<String, City> getMap() {
return map;
}

public void setMap(Map<String, City> map) {
this.map = map;
}

public class City {
private String code;
private String des;
private Map<String, District> map;

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getDes() {
return des;
}

public void setDes(String des) {
this.des = des;
}

public Map<String, District> getMap() {
return map;
}

public void setMap(Map<String, District> map) {
this.map = map;
}
}

public class District {
private String code;
private String des;

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getDes() {
return des;
}

public void setDes(String des) {
this.des = des;
}
}
}

有了Gson和Model之后,离我们想要的数据也只差一步了。

1
2
3
Gson gson = new Gson();
gson.fromJson(json,new TypeToken<Map<String,AreaModel>>(){
}.getType());

这样所有的数据都解析成了Map,剩下的工作就只剩下遍历Map取出想要的数据了。

文章目录
  1. 1. 解析Map型的Json数据