Gson实现自定义解析json格式
客户端跟服务器交互的时候我们使用json实现 但是 在交互的时候除了传送json对象数据意外 我们还需要传输标志位等
{"data": {"age": 29,"name": "wangzhiqiang","sex": 1},"message": "ok","status": 200}
{"data": [{"age": 29,"name": "wangzhiqiang","sex": 1},{"age": 29,"name": "wangzhiqiang","sex": 1}],"message": "ok","status": 200}
{"message": "用户密码不正确!","status": 355}
http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html
JsonParser 解析json文本的解析器,它将json文本解析成JsonElement树。
try {String json = new String(response.data,HttpHeaderParser.parseCharset(response.headers));// #1 解析code message code=200&& message="ok"代表成功JsonPraser parser = new JsonParser();JsonObject root = parser.parse(json).getAsJsonObject();int code = root.get("code").getAsInt();String message = root.get("message").getAsString();if (code == HttpStatus.SC_OK) {// 操作成功return parseNetworkResponse(root, response);} else {return Response.error(new NetError(code, message));}} catch (UnsupportedEncodingException e) {return Response.error(new ParseError(e));} catch (com.google.gson.JsonSyntaxException e) {return Response.error(new ParseError(e));}
public abstract class DRequest<T> extends Request<T> {protected String KEY_CONTENT = "content";protected String KEY_DATA = "data";Map<String, String> mParams;public DRequest(String url,ErrorListener errorListener) {this(Method.POST, url,new HashMap<String, String>(),errorListener);}public DRequest(String url,Map<String, String> params,ErrorListener errorListener) {this(Method.POST, url,params,errorListener);}public DRequest(int method, String url,Map<String, String> params,ErrorListener errorListener) {super(method, url, errorListener);this.mParams = params;}@Overrideprotected Response<T> parseNetworkResponse(NetworkResponse response) {try {String json = new String(response.data,HttpHeaderParser.parseCharset(response.headers));// #1 解析code message code=200&& message="ok"代表成功JsonParser parser = new JsonParser();JsonObject root = parser.parse(json).getAsJsonObject();int code = root.get("code").getAsInt();String message = root.get("message").getAsString();if (code == HttpStatus.SC_OK) {// 操作成功return parseNetworkResponse(root, response);} else {return Response.error(new NetError(code, message));}} catch (UnsupportedEncodingException e) {return Response.error(new ParseError(e));} catch (com.google.gson.JsonSyntaxException e) {return Response.error(new ParseError(e));}}@Overridepublic Map<String, String> getParams() throws AuthFailureError {return mParams;}public void put(String key, String value) {mParams.put(key, value);}/*** 子类实现解析** @param root* @param response* @return*/public abstract Response<T> parseNetworkResponse(JsonObject root,NetworkResponse response);}
public class DJsonRequest<T> extends DRequest<DataContainer<T>> {private Type type;private RequestHandler<T> handler;public DJsonRequest(String url,RequestHandler<T> handler, Type type) {super(url, handler);this.type = type;this.handler =handler;}public DJsonRequest(int method, String url,Map<String, String> params, RequestHandler<T> handler, Type type) {super(method,url, params,handler);this.type = type;this.handler =handler;}@Overridepublic Response<DataContainer<T>> parseNetworkResponse(JsonObject root,NetworkResponse response) {Log.d("MyNet","获得响应");// data 元素JsonElement dataElement = root.get(KEY_DATA);if (dataElement.isJsonNull()) {// 不存在数据return Response.error(new NetError(703, "data空!"));}JsonObject data = dataElement.getAsJsonObject();JsonElement contentElement = data.get(KEY_CONTENT);if (contentElement.isJsonNull()) {// content 里面是nullreturn Response.error(new NetError(702, "content空!"));}if (contentElement.isJsonObject()) {// conatent里面是对象T result = new Gson().fromJson(contentElement, type);DataContainer<T> container = new DataContainer<T>();container.dataSingle = result;return Response.success(container,HttpHeaderParser.parseCacheHeaders(response));}if (contentElement.isJsonArray()) {// 数组List<T> list = new Gson().fromJson(contentElement, type);DataContainer<T> container = new DataContainer<T>();container.dataList = list;return Response.success(container,HttpHeaderParser.parseCacheHeaders(response));}return Response.error(new NetError(703, "data空!"));}@Overrideprotected void deliverResponse(DataContainer<T> response) {if (handler!=null) {handler.onResponse(response);}}}
Gson实现自定义解析json格式的更多相关文章
- 用GSON解析Json格式数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...
- 使用GSON和泛型解析约定格式的JSON串(转)
时间紧张,先记一笔,后续优化与完善. 解决的问题: 使用GSON和泛型解析约定格式的JSON串. 背景介绍: 1.使用GSON来进行JSON串与java代码的互相转换. 2.JSON的格式如下三种: ...
- $Java-json系列(一):用GSON解析Json格式数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...
- 使用google的GSON解析json格式的数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...
- 使用Gson送解析Json格式
Java bean: package com.jingle.a; public class Person { public String name; public int age; public Pe ...
- Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson
Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson等等 本人fastJson用了两年,也是从去年才开始接触Gson,希望下面的总结会对博友有用,至于Gso ...
- 解析json格式数据
实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...
- Scala解析Json格式
Scala解析Json格式 代码块 Scala原生包 导入包 import scala.util.parsing.json._ def main(args: Array[String]): Unit ...
- WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)
DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...
随机推荐
- spring-security4.1.2的学习
spring security教程 spring security是什么? Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了 ...
- myeclipse中将整块的代码所选中的代码左右移动的快捷键
myeclipse中将整块的代码/所选中的代码左右移动的快捷键选择你要移动的代码,TAB 右移ctrl+TAB左移(我的使用Shift+TAB管用)要是不使用快捷键就是:选中代码,点击右键选中Shif ...
- Visual Studio 2015 工具箱丢失
网上主要的解答分为两种:1. 未打开设计界面 2. 重置 实际上,还有一个原因是,没有启动完整版的VS. 安装完后,会有两个VS的程序,一个是Blend For Visual Studio 2015, ...
- 多层iframe的页面取子标签
<iframe src=''> <iframe src=''> <iframe src=''> <div></div></iframe ...
- eclipse debug maven项目时出现缺少库的问题
调试maven web项目时出现缺少库的情况导致项目无法启动 可是打包到tomcat发布却一切正常 后来在stackoverlow上找到了解决方案 项目右键属性->Deployment Ass ...
- nagios二次开发(一)---开发思想
NAGIOS现状 从nagios的官网http://www.nagios.org/及其它已经公开的资料,我们可以知道:在web UI层nagios只提供了给我们查看图形界面的操作,界面上有简单的启 ...
- 遭遇flash播放mp3诡异问题
在部分ie10+flash player 播放mp3,播放第二句话时,中断无法正常播放,(客户的机器上),自己公司的机器测试了几个,都没发现这个问题.其它浏览器(chrome,firefox)也没发现 ...
- 用Java写算法之归并排序
转自:http://flyingcat2013.blog.51cto.com/7061638/1281026 前面的三种排序算法(冒泡排序,选择排序,插入排序)在平均情况下均为O(n^2)复杂度,在处 ...
- angular 调试 js (分 karms protractor / test e2e unit )
首页订阅 Protractor端到端的AngularJS测试框架教程 2014年01月18日 分类:教程, JavaScript, AngularJS Protractor是一个建立在WebDrive ...
- mac升级后提示pod: command not found
问题:升级mac到10.12使用pod,提示pod: command not found 解决方法:sudo gem install -n /usr/local/bin cocoapods 如 ...