GSON解析复杂性json串

来源:互联网 发布:看得很湿的黄文 知乎 编辑:程序博客网 时间:2024/06/11 19:17

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