Android基础之使用Gson解析json数据 第一弹
2016-10-27 00:02
549 查看
Android基础之使用Gson解析json数据 第一弹
首先介绍一下JSON数据的格式JSON数据 | JSON对象 | 可解析成 |
---|---|---|
{……..} | JSONObject | Map或Object |
[……..] | JSONArray | List |
数据 | 解析后的数据类型 |
---|---|
“code”: 0 | 数据:0 没有双引号,表示Number(int/double/float)型,后面统称为Number型 |
“message”: “0” | 数据:”0”,有双引号,表示String型 |
“data”: false | 数据:false,表示boolean型 |
“data”: {……} | 数据:{……},表示Map型 |
“data”: [……] | 数据:[……] ,表示List型 |
“data”: null | 数据:null,表示空,数据类型未知,可以认为是Object |
* 1、基础数据类型 Number型和boolean型
* 2、对象类型:包括String,List,Map,及其它Object
分类讲解
无论遇到什么样的json数据,我们都是从最外层一步一步往里面分析。1.单个JSONObject数据
{ "code": 0, "message": "成功" }
分析:
最外层是一个{…..},根据上面的表格,这个格式可以解析成 Map或者Object
如果解析成Map,会生成两组键值对 key = “code” value = 0 和 key = “message” value = “成功”
如果解析成Object, code和message将是两个成员变量名,类型分别为int 和 String
//解析称Map的例子 Gson gson = new Gson(); Map map = gson.fromJson(json, Map.class); int code = (int) map.get("code");
//解析成Object实体类类 public class Entity { private int code; private String message; } Gson gson = new Gson(); Entity entity = gson.fromJson(json, Entity.class);
2.单个JSONArray数据
[{ "code": 0, "message": "成功" },{ "code": 0, "message": "成功" }
]
分析:
最外层是一个【…】,说面可以解析称List。
【…】里面是两个{….},说明List里面是两个Object或Map
因此可以解析成List或List《Object》
//解析成List<Entity> Type listType = new TypeToken<List<Entity>>(){}.getType(); Gson gson = new Gson(); List<Entity> list = gson.fromJson(json, listType); //也可以解析成List<Map> Type listType = new TypeToken<List>(){}.getType(); Gson gson = new Gson(); List<Map> list = gson.fromJson(json, listType);
3.JSONObject内含有JSONArray
{
"code": 0,
"message": "成功",
"data":
[{ "code": 0, "message": "成功" },{ "code": 0, "message": "成功" }
]
}
分析:
最外层是一个 {….},说面可以解析称 Map或者Object
最外层的{….}里面有3个key,分别是 code(int型),message(String型),data(Object型),如下:
public class Entity { private int code; private String message; private Object data; }
那么data到底是什么类型呢?我们接着往下看。
data里面的数据是一个【…】,说明是一个List
而List里面是两个{…},也是就是两个Map或者Object,我们可以将这个对象封装成Bean
因此 data类型为List《Bean》
public class Entity { private int code; private String message; private List<Bean> data; public static class Bean { private int code; private String message; } }
4.单个JSONObject,里面包含了单个JSONObject数据,而这个JSONObject又包含了一个JSONArray
{
"code": 0,
"message": "成功",
"data": {
"data1": [{ "code": 0, "message": "成功" },{ "code": 0, "message": "成功" },
],
"data2": [{ "code": 0, "message": "成功" },{ "code": 0, "message": "成功" },
]
}
}
分析
1. 最外层是{…},说明整体可以解析成一个对象Object或者Map,我们通常会封装成Object
2. 这个Object包含三个成员变量,code(int型),message(String型),data(Object)
public class Entity { private int code; private String message; private Object data; }
这个Object data到底是什么数据类型呢?我们接着往下看。
data后面是一个{…},说明是一个Map或者是Object。通常我们都是封装称Object,那我们就先封装试试
这个data Object 包含两个成员变量,分别是data1和data2。
data1和data2后面是【…】说明data1和data2是两个List,如下:
public class Entity { private int code; private String message; private Data data; public static class Data { private List<Bean> data1; private List<Bean> data2; } public static class Bean { private int code; private String message; } }
如果看到这里还有点懵逼的朋友,建议看看上面的解析过程!!!
现在就出现一个问题,这个data1和data2是不确定的,有时候是data3甚至是data100。怎么办?
我们回归至前面分析的第4条,再次分析一次,寻找突破口:data后面是一个{…},说明是一个Map或者是Object。通常我们都是封装称Object,那我们就先封装试试
实践证明,封装成Object是不合理的,因为作为成员变量的data1和data2是不固定的。
既然不能封装成Object,那就是使用Map,这个Map包含两个key 分别是data1和data2,这两个key对应的值是两个List
因此data的数据类型是 Map《String,List《Bean》》,如下:
public class Entity { private int code; private String message; private Map<String, List<Bean>> data; public static class Bean { private int code; private String message; } }
后续有空将推出Gson异常处理,和重构。
相关文章推荐
- 在Android中可以使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中Gson解析json数据使用@SerializedName注解与java对象不匹配的字段
- Android中使用Gson解析JSON数据
- android_使用Gson解析json数据
- Android:使用Gson解析复杂的JSON数据
- Android中使用Gson解析JSON数据
- Android:使用Gson解析复杂的JSON数据
- 在Android中可以使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中Json数据解析(二)--使用Gson、Jackson和FastJson解析Json数据
- Android 使用Gson解析Json数据
- Android中Json数据解析(二)--使用Gson、Jackson和FastJson解析Json数据
- json 的解析-使用Android中的JSONObject和JSONArray解析json数据,gson中的JsonReader解析json数据
- Android中使用Gson解析JSON数据的方法
- Android中使用Gson解析JSON数据的两种方法
- android中使用Gson解析普通json数据(致我的第一篇博文)
- Android下使用Gson解析JSON数据
- Android中使用Gson解析JSON数据的两种方法