GSON解析复杂性json串

1.前段时间出去找工作了,目前已经工作了一周,有一个很明显的感觉,就是自己的进度缓慢,的确公司项目和自己平时练习项目的确有很大的距离。平时练习写的demo短板太大。今天我就把我自己在项目中遇到的问题记录下。主要是关于json解析的问题。


2.有这么一段json串:

{
	"responseCode": "200",
	"state":1,
	"data":[
		{
		    "name":"wxy",
		    "age":18,
		    "sex":"男",
		    "features":[
		    	{
		    	
		    		"height":177,
		    		"weight":160,
		    		"big":"180"
		    	},
		    	{
		    	   <span style="white-space:pre">	</span> "height":178,
		    		"weight":150
		    	}
		    
		    ]
		},
		{
		    "name":"wxy",
		    "age":18,
		    "sex":"男",
		    "features":[
		    	{
		    		"height":177,
		    		"weight":160,
		    		"big":"200"
		    	},
		    	{
		    	    "height":178,
		    		"weight":150
		    	}
		    
		    ]
		}	
	]
 }
这个串的结构是:

首先一个大的 jsonobject,里面有一个jsonarray。

然后jsonarray里面又有一个jsonObject,而这个jsonobject里面又有一个jsonarray。这样的该怎么解析呢?


jsonarray里面的数据,一般都是同类型的,因此只要看到[   ],我们就要确定要使用List。


具体解析如下:

1.首先创建一个大的javabean:

	public String responseCode;
	public int state;
	public List<Result>data;
	public String getResponseCode() {
		return responseCode;
	}
	public void setResponseCode(String responseCode) {
		this.responseCode = responseCode;
	}
	public int getState() {
		return state;
	}
	public void setState(int state) {
		this.state = state;
	}
	public List<Result> getData() {
		return data;
	}
	public void setData(List<Result> data) {
		this.data = data;
	}
	
2.然后再创建Result的类:因为Result里面的数据也有jsonarray:所以可以肯定Result类里面肯定有一个LIst。代码如下:

	public static class Result{
		public String name;
		public int age;
		public String sex;
		public List<Infor>features;
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		public String getSex() {
			return sex;
		}
		public void setSex(String sex) {
			this.sex = sex;
		}
		public List<Infor> getFeatures() {
			return features;
		}
		public void setFeatures(List<Infor> features) {
			this.features = features;
		}
	}

3.在看Infor类。注意Featrues这个jsonarray里面。第二个jsonobject 没得big 属性,而第一个有。(这是我们公司真实的案例)

其实不管有没有big属性,我们都可以在Infor类中加上去。

public static class Infor{
		public String big;
		public int height;
		public int weight;
		public int getHeight() {
			return height;
		}
		public void setHeight(int height) {
			this.height = height;
		}
		public int getWeight() {
			return weight;
		}
		public void setWeight(int weight) {
			this.weight = weight;
		}
		public String getBig() {
			return big;
		}
		public void setBig(String big) {
			this.big = big;
		}
	}


4.调用Gson的代码,来解析:

 Gson gson =new Gson();  
JavaBean bean=gson.fromJson(response, JavaBean.class);

代码就是这俩行。

注意:因为features那个jsonobject 没得big列,所以你获取值的时候不会得到值,因此你可以在Infor类中。给big一个初始值,通过这个初始值来判断。有没有big列。


一个请求就需要设计3个javabean,假如每个bean都写在一个类中,这样无疑是太多了。因为一个项目中的请求很多的。

所以有必要把这个3个写在一起。

这里注意的一点是:Result和Infor类 全部要加一个修饰 static。

代码如下:

public class JavaBean {
	
	public String responseCode;
	public int state;
	public List<Result>data;
	public String getResponseCode() {
		return responseCode;
	}
	public void setResponseCode(String responseCode) {
		this.responseCode = responseCode;
	}
	public int getState() {
		return state;
	}
	public void setState(int state) {
		this.state = state;
	}
	public List<Result> getData() {
		return data;
	}
	public void setData(List<Result> data) {
		this.data = data;
	}
	
	
	public static class Result{
		public String name;
		public int age;
		public String sex;
		public List<Infor>features;
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		public String getSex() {
			return sex;
		}
		public void setSex(String sex) {
			this.sex = sex;
		}
		public List<Infor> getFeatures() {
			return features;
		}
		public void setFeatures(List<Infor> features) {
			this.features = features;
		}
	}
	
	
	public static class Infor{
		public String big;
		public int height;
		public int weight;
		public int getHeight() {
			return height;
		}
		public void setHeight(int height) {
			this.height = height;
		}
		public int getWeight() {
			return weight;
		}
		public void setWeight(int weight) {
			this.weight = weight;
		}
		public String getBig() {
			return big;
		}
		public void setBig(String big) {
			this.big = big;
		}
	}

}


好了,今天主要的问题是:json串中每个jsonobject中都嵌套了一个jsonarray的时候,该如何解析。

下一节主要说下,Volley post传参数的使用,这个我真是踩到地雷了,纠结了半天,导致自己上班时候效率不高。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值