Gson实现自定义解析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
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;
}
@Override
protected 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));
}
}
@Override
public 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;
}
@Override
public 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 里面是null
return 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空!"));
}
@Override
protected void deliverResponse(DataContainer<T> response) {
if (handler!=null) {
handler.onResponse(response);
}
}
}
转载于:https://www.cnblogs.com/xiaowangabc/p/d0c34013b6c24a4f62a3bdedb3b0a5cc.html
Gson实现自定义解析json格式相关推荐
- Java-json系列(一):用GSON解析Json格式数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...
- oracle如何解析json,oracle 解析json格式
1. CREATE OR REPLACE PACKAGE PKG_ANALYSE_COMMON IS -- AUTHOR : YZCHEN -- CREATED : 2013/11/26 14:12: ...
- C#深入解析Json格式内容
继上一篇<浅谈C#手动解析Json格式内容>我又来分析加入了一些功能让 这个解析类更实用 本章节最会开放我最终制作成功的Anonymous.Json.dll这个解析库 需要的拿走~ 功能继 ...
- java解析sql查询字段_sql解析json格式字段 如何获取json中某个字段的值?
java将json数据解析为sql语句?小编给你倒一杯热水.可你惦记着其他饮料,所以你将它放置一旁.等你想起那杯水时,可惜它已经变得冰冷刺骨. 图片中是json数据,每个数据的开头都有表名称,操作类型 ...
- Oracle怎么获取json类型字符串值,sql解析json格式字段 如何获取json中某个字段的值?...
java将json数据解析为sql语句?小编给你倒一杯热水.可你惦记着其他饮料,所以你将它放置一旁.等你想起那杯水时,可惜它已经变得冰冷刺骨. 图片中是json数据,每个数据的开头都有表名称,操作类型 ...
- python中json模块_Python使用内置json模块解析json格式数据的方法
本文实例讲述了Python使用内置json模块解析json格式数据的方法.分享给大家供大家参考,具体如下: Python中解析json字符串非常简单,直接用内置的json模块就可以,不需要安装额外的模 ...
- QT解析 JSON 格式的数据
QT解析 JSON 格式的数据 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON 采用完全独立于语言的文本格式,这些特性使 JSON 成为理想的数 ...
- javascript解析json格式的字符串,拼接后显示到表格中
知识点 解析json格式的字符串 拼接的HTML设置到tbody当中 加载json格式的对象 结果演示 html代码 <!DOCTYPE html> <html><hea ...
- php使用 js格式解析,JavaScript解析JSON格式数据的方法示例
本文实例讲述了JavaScript解析JSON格式数据的方法.分享给大家供大家参考,具体如下: 1.使用JavaScript提供的eval()函数function JsonText1() { var ...
最新文章
- XenDesktop中无法删除虚拟机
- 微信服务号 微信支付开发
- php 分页类使用,php 分页 分页类 简单实用
- 【BJDCTF 2nd—MISC/Crypto】做题+复现记录
- Java Web编程的主要组件技术——Hibernate入门
- Linux中的mysql.redis
- PAT甲题题解-1050. String Subtraction (20)-水题
- linux数据软件,Linux数据安全工具:数据镜像软件DRBD的管理与维护
- 【冷笑话】看谁跑的快?
- 机器视觉:系统中影响图像质量的因素有哪些?
- 领域驱动设计 软件核心复杂性应对之道_DDD - 领域驱动设计对软件复杂度的应对(上)...
- linux文件夹怎么看md5,怎么看md5
- 计算机表格里的隐藏怎么弄出来怎么办,电脑屏幕的excel表格最后一行看不到怎么办《excel表隐藏的表格怎么展开》...
- 电脑系统优化清理工具CCleaner
- Android流式布局控件
- 如何将微信公众号上的文章下载下来?
- 清华大学数据挖掘课程幕课习题(第一章)
- Xshell连接虚拟机linux
- UVa 10306 - e-Coins
- 门多萨与马尔克斯谈话录
热门文章
- 数据结构——插入排序
- 吴恩达深度学习 —— 2.13 逻辑回归的向量化
- IPC--进程间通信一(管道)
- Markdown Pad2--公式编辑功能搭建
- Matlab--二次多项式曲面拟合
- Docker学习三:Docker 数据管理
- 服务器多个网站开启quarz,GitHub - WuLex/QuartzSynchroData: 多个不同站点服务器数据同步到总服务器(数据中心)...
- 单片机外设基本概念_单片机基本概念
- linux 6.3 ftp安装,CentOS6.3下安装VSFTP服务
- 使用java连接ftp服务器_Java如何连接到FTP服务器?