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;这样就可以解析实体类中的子数组

言归正传,仔细观察我们的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 = 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

 

你可能感兴趣的:(关键代码,原创)