关键代码|android Gson多维Json数组解析

解析Json数据时,遇到二维数组或者更多维的数组的处理方法。
Json如下:

{"code": 1, "data": [ [ { "nodename": "测试", "addr": "中国北京市xx区xx路x号", "uid": "123", } ], [ { "nodename": "测试", "addr": "中国北京市xx区xx路x号", "uid": "123", } ], [ { "nodename": "测试", "addr": "中国北京市xx区xx路x号", "uid": "123", } ] ], "message": "success!"}

看到这种JSON,新入门的伙伴们肯定会感到头大,好像很麻烦也!?
JsonObject
采用原生的JsonObject,JsonArray方式会非常非常麻烦,首先解析JsonObject==》解析"data" JsonArray==>再解析JsonArray[i]==>再解析JsonObject。
是不是看上去就懵逼,而且很复杂。
那么肯定有更简单的方式去解析这种多维的JSON数组。
Gson
今天就讲一下Gson解析多维数组:
  1. 使用Gson解析json数据,就一定会用到实体类,根据json内容,创建我们的UserBean实体类
切记一定要实现Serializable序列化接口,只有这样才能正常解析或者转换。
public class UserBean implements Serializable {private String addr; private String nodename; private String uid; //===================================== //上面3个参数名就是对应的json对象 { "nodename": "测试", "addr": "中国北京市xx区xx路x号", "uid": "123", } //=====================================public String getUid() { return userid; }public void setUid(String uid) { this.uid = uid; }public String getAddr() { return addr; }public void setAddr(String addr) { this.addr = addr; }public String getNodename() { return nodename; }}

2.分析要解析的Json结构:
{"code": 1, "data": [ [ { "nodename": "测试", "addr": "中国北京市xx区xx路x号", "uid": "123",} ]], "message": "success!"}

分析步骤:①把最外围的键对当做实体类中的参数名 ,一定要与json数据中的键名保持一致,我们生成实体类的时候,一般参数名都是小写
②键值对相对应的值的类型就是我们实体类中参数名的类型。扩展:
如"data":[]碰到这种键值对,实体类中的参数就可以写成 List data; 这样就可以解析实体类中的子数组
【关键代码|android Gson多维Json数组解析】言归正传,仔细观察我们的Json,会发现"data"的值是一个二维数组,而第二维中的数据才是我们需要的数据,也就是我们的UserBean,很简单,用于直接解析的根实体这么写就OK了:
class MyDataBean implements Serializable {private List> data; //===================================== "data": [ [ { "nodename": "测试", "addr": "中国北京市xx区xx路x号", "uid": "123",}"{}"里的是UserBean ]这一维数组"[]"是List]最外围的数组"[]"是List> //=====================================private String code; private String message; public String getCode() { return code; }public void setCode(String code) { this.code = code; }public List> getData() { return data; }public void setData(List> data) { this.data = https://www.it610.com/article/data; }public String getMessage() { return message; }public void setMessage(String message) { this.message = message; } } }

最后解析就用两行代码就完事了:
//===================================== Gson gson = new Gson(); //解析成我们的根实体类,这样,二维数组就完全导入到我们的实体类中了 MyDataBean myDataBean = gson.fromJson(jsonstr, MyDataBean.class); //=====================================//想要取值只需要遍历一下即可:UserBeanList = new ArrayList(); for (int i = 0; i < myDataBean.getData().size(); i++) { //这个就是我们的二维Json数组 List> mlslsAmb = myDataBean.getData(); if (mlslsAmb != null && mlslsAmb.size() > 0) { //因为第二维数组只存在一个元素,所以只需要获取第一个,也就是get(0) UserBean abean = mlslsAmb.get(i).get(0); //最后装载进我们的UserBeanList就可以正常使用了 UserBeanList.add(abean); }}

扩展:
解析JsonArray
//直接解析JsonArray//json代码如下: //===================================== [ { "nodename": "测试", "uid": "11", "addr": "中国北京市xx区xx路x号", }, { "nodename": "zhangsan", "uid": "10", "addr": "中国北京市xx区xx路x号", } ] //=====================================//使用以下方法进行解析 List ls_userBean = new Gson().fromJson(user, new TypeToken>() {}.getType()); 这样就把jsonArray直接变成ArrayList


    推荐阅读