Gson 解析复杂json字符串
2015-11-16 15:36
591 查看
对Gson不了解的同学可以先去了解下Gson的基本用法
需要解析的Json字符串如下: {"data":{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","indexId":"02","provinceName":"江苏省"}]},"result":"ok"}
先贴上解析json字符串的代码:
首先我们定义了一个数据bean用来装载Gson解析出来的数据:
此类将所有的返回分成返回码statusCode和返回的实体responseEntity两个部分。
然后定义了一个针对上述基本bean的实体的bean,
这个bean中有四个属性,分别为:当返回的数据格式为json对象的时候的successEntity ,错误信息failureMsg,返回数据格式为jsonArray的successList 以及jsonArray的长度。
下面针对具体的返回定义了一个基础Bean:
针对{"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":"江苏省"}]} ,使用如下:
如果返回不是jsonArray而是jsonObject,则
通过以上的封装我们可以根据服务器的返回类型来调整自己的数据bean,从而实现代码的复用。。。。。。
需要解析的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,从而实现代码的复用。。。。。。
相关文章推荐
- javascript伸缩型菜单实现代码
- Excel数据转换为cvs,json,xml
- JavaScript基础——函数表达式
- 每天一篇javascript学习小结(Function对象)
- JavaScript中类与对象的介绍
- JSP入门:include指令与jsp:include动作标志
- json对象与json字符串之间的转化
- 举例讲解JavaScript中关于对象操作的相关知识
- js设置、获取单值cookie和多值cookie
- js中eval()和$.parseJSON()的区别和联系以及JSON.stringify()
- 各js取值。
- HTML带有JS的加载
- JavaScript修改和删除cookie
- week11---11月20日 JS基础(八)
- Javascript AMD模块化规范-备用
- Sublime Text插件:HTML+CSS+JAVASCRIPT+JSON快速格式化[转]
- JavaScript中对DOM节点的访问、创建、修改、删除
- 常用javascript表单验证汇总
- char.js
- javascript/js 原生动态引入外部css文件及动态插入css代码片段