您的位置:首页 > Web前端 > JavaScript

GSON解析复杂性json串

2016-07-17 10:03 363 查看
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传参数的使用,这个我真是踩到地雷了,纠结了半天,导致自己上班时候效率不高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  json解析