对Gson不了解的同学可以先去了解下Gson的基本用法
需要解析的Json字符串如下: {"data":{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","indexId":"02","provinceName":"江苏省"}]},"result":"ok"}
先贴上解析json字符串的代码:
public ResponseData<Province_net> providerNetProviceListData(String result) {
ResponseData<Province_net> responseData = new ResponseData<Province_net>();
ResponseEntity<Province_net> responseEntity = new ResponseEntity<Province_net>();
Gson gson = new Gson();
BaseNetData<BaseNetProvincesList<Province_net>> baseNetData = gson.fromJson(
result,
new TypeToken<BaseNetData<BaseNetProvincesList<Province_net>>>() {
}.getType());
String resultCode = baseNetData.getResult();
if (null != resultCode && !TextUtils.isEmpty(resultCode)) {
if (resultCode.equalsIgnoreCase("ok")) {
responseData.setStatusCode(ResponseData.STATUS_CODE_SUCCESS);
responseEntity.setSuccessList(baseNetData.getData().getData());
responseData.setResponseEntity(responseEntity);
}
// redscs
else if (resultCode.equals("NO_DATA")) {
responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
responseEntity.setFailureMsg("没有数据");
responseData.setResponseEntity(responseEntity);
} else if (resultCode.equalsIgnoreCase("EXCEPTION")) {
responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
responseEntity.setFailureMsg("服务器端异常");
responseData.setResponseEntity(responseEntity);
} else if (resultCode.equalsIgnoreCase(INVALID_TOKEN)) {
responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
responseEntity.setFailureMsg(INVALID_TOKEN);
responseData.setResponseEntity(responseEntity);
} else {
responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
responseEntity.setFailureMsg("未知错误");
responseData.setResponseEntity(responseEntity);
}
} else {
responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
responseEntity.setFailureMsg("获取数据异常");
responseData.setResponseEntity(responseEntity);
}
return responseData;
}
首先我们定义了一个数据bean用来装载Gson解析出来的数据:
public class ResponseData<T> {
public static final int STATUS_CODE_SUCCESS = STATUS_CODE_BEGIN + 1;
public static final int STATUS_CODE_FAILURE = STATUS_CODE_BEGIN + 2;
private int statusCode;
private ResponseEntity<T> responseEntity;
public int getStatusCode() {
return statusCode;
}
public void setStatusCode(int statusCode) {
this.statusCode = statusCode;
}
public ResponseEntity<T> getResponseEntity() {
return responseEntity;
}
public void setResponseEntity(ResponseEntity<T> responseEntity) {
this.responseEntity = responseEntity;
}
}
此类将所有的返回分成返回码statusCode和返回的实体responseEntity两个部分。
然后定义了一个针对上述基本bean的实体的bean,
public class ResponseEntity<T> {
private String failureMsg;
private T successEntity;
private int totalCount;
private List<T> successList;
public String getFailureMsg() {
return failureMsg;
}
public void setFailureMsg(String failureMsg) {
this.failureMsg = failureMsg;
}
public T getSuccessEntity() {
return successEntity;
}
public void setSuccessEntity(T successEntity) {
this.successEntity = successEntity;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public List<T> getSuccessList() {
return successList;
}
public void setSuccessList(List<T> successList) {
this.successList = successList;
}
}
这个bean中有四个属性,分别为:当返回的数据格式为json对象的时候的successEntity ,错误信息failureMsg,返回数据格式为jsonArray的successList 以及jsonArray的长度。
下面针对具体的返回定义了一个基础Bean:
public class BaseNetData<T> {
private String result;
private T data;
public String getResult() {
return result;
}
public T getData() {
return data;
}
public void setResult(String result) {
this.result = result;
}
public void setData(T data) {
this.data = data;
}
}
针对{"data":{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","indexId":"02","provinceName":"江苏省"}]},"result":"ok"} 。 此类中的result属性对应json字符串中的“result”, data对应着“data” 。(一定保证字段名字的一致)。
然后对于{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","indexId":"02","provinceName":"江苏省"}]} ,使用如下:
public class BaseNetListData<T> {
private int total;
private List<T> data;
public int getTotal() {
return total;
}
public List<T> getData() {
return data;
}
public void setTotal(int total) {
this.total = total;
}
public void setData(List<T> data) {
this.data = data;
}
}
如果返回不是jsonArray而是jsonObject,则
public class BaseNetEntityData<T> {
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
通过以上的封装我们可以根据服务器的返回类型来调整自己的数据bean,从而实现代码的复用。。。。。。