GSON解析复杂性json串
2016-07-17 10:03
393 查看
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传参数的使用,这个我真是踩到地雷了,纠结了半天,导致自己上班时候效率不高。
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传参数的使用,这个我真是踩到地雷了,纠结了半天,导致自己上班时候效率不高。
相关文章推荐
- asp对复杂json的解析一定要注意要点
- JSON序列化与解析原生JS方法且IE6和chrome测试通过
- Android 解析JSON对象及实例说明
- 收集json解析的四种方法分享
- Android中JSON数据的解析
- java代码解析json对象获取json对象属性值
- 学习json post请求和json解析
- Android json详解
- swift JSON字符串解析 json parse / json decode
- json解析效率对比
- 什么是json以及json解析
- Cocos2d/x 解析服务器JSON数据
- Json与对象的相互转换
- 有没有人可以帮我解析一下下面的json
- android解析json串
- 基本HTTP请求+JSON解析+发送异步请求
- Gson 转换树型结构的实例
- json解析简单事例
- Volley完全解析
- 如何使用json-lib解析有2层嵌套的list数据,然后放到对应的bean中