解析Map型的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取出想要的数据了。