在使用Google的 Gson 类库解析 Json 数据时,难免会出现解析失败的情况。

在这种情况下,使用 if(obj == null) 是不可行的,fromJson 方法会自动生成对象的实例,所以这样返回的结果都是true,当然也可以用 if (obj.Field == null && ……)这种方法,但这并不是最好的选择,所以就有了遍历对象的想法,通过反射获取对象的所有属性名,再通过属性名称获取属性值,也就有了isAnalysisFile 这个方法。

反射获取对象所有属性名称 :

public static String[] getObjectAllFiledName(Object obj){
Field[] fields = obj.getClass().getDeclaredFields();
String[] fieldsNames = new String[fields.length];
for (int i = 0; i < fieldsNames.length; i++) {
fieldsNames[i] = fields[i].getName();
}
return fieldsNames;
}

反射获取对象所有属性值,根据GET方法获取。

public static Object getFieldValueByName(String fieldName,Object obj) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" +firstLetter+ fieldName.substring(1);
Method method = obj.getClass().getMethod(getter, new Class[] {});
Object valueArr = method.invoke(obj, new Object[] {});
return valueArr;
}

遍历对象所有属性值,判断是否为NULL,一般情况下只会出现两种情况,NULL和FALSE。

因此只要有一个属性值为TRUE,直接返回结果,解析是成功的。

如果全部为NULL和FALE,那么判定为解析失败。

public static boolean isAnalysisFail(Object object){
String[] fields = getObjectAllFiledName(object);
boolean flag = true;
for (String string : fields) {
try {
Object obj = getFieldValueByName(string, object);
if(obj == null) {
flag = false;
}else if(Boolean.parseBoolean(obj.toString())){
return true;
}else {
flag = true;
}
} catch (NoSuchMethodException e) { e.printStackTrace();
} catch (SecurityException e) { e.printStackTrace();
} catch (IllegalAccessException e) { e.printStackTrace();
} catch (IllegalArgumentException e) { e.printStackTrace();
} catch (InvocationTargetException e) { e.printStackTrace();
}
}
return flag;
}
使用 :
if (!Tools.isAnalysisFail(ipMaster)) {
msg = handler.obtainMessage();
msg.what = -1;
msg.obj = "送货单不存在";
handler.sendMessage(msg);
}
 

封装 Gson 解析Json到对象是否失败的更多相关文章

  1. 大话JSON之Gson解析JSON

    (三)解析Json数组(多条Json数据) 比如有如下Json数据: [{'name':'John', 'grade':[{'course':'English','score':100},{'cour ...

  2. Android--------使用gson解析json文件

    ##使用gson解析json文件 **json的格式有两种:** **1. {}类型,及数据用{}包含:** **2. []类型,即数据用[]包含:** 下面用个例子,简单的介绍gson如何解析jso ...

  3. $Java-json系列(一):用GSON解析Json格式数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

  4. 使用Gson解析json

    前边的博客说过将json解析成java的方法,使用的是 这几个jar包,但是在解析时层遇到一个问题,就是在将时间字符串转换为java的Timestamp对象时会抛出异常,这个问题一直放在哪里没有去解决 ...

  5. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  6. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. 【Android进阶】Gson解析json字符串的简单应用

    在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式, ...

  8. Android中使用Gson解析JSON数据

      Android中使用Gson解析JSON数据 在Android中可以使用Gson解析JSON数据 首先,从 code.google.com/p/google-gson/downloads/list ...

  9. Google Gson解析Json数据应用实例

    转自:http://lixigao449778967.blog.163.com/blog/static/24985164201269105928783/ 1.需要的Jar包 1) Google Gso ...

随机推荐

  1. 使用SSH+SFTP操作终端全解析,告别XShell

    1.前言 在Windows系统下操作远程服务器的方式很多,比如XShell+XFTP组合,亦或是PuTTY+WinSCP组合,但在Mac系统下登陆远程服务器,并没有这些工具供我们使用.相比较而言,在M ...

  2. 玲珑OJ 1083:XJT Love Digits(离线处理+哈希)

    http://www.ifrog.cc/acm/problem/1083 题意:比较好懂.注意答案的x不包含ax本身,所以才输出-1. 思路:离线处理.根据x排序,然后每次更新Hash[]数组就好了. ...

  3. scrapy实战1分布式爬取有缘网(6.22接口已挂):

    直接上代码: items.py # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See docu ...

  4. Event StoryLine Corpus 论文阅读

    Event StoryLine Corpus 论文阅读 本文是对 Caselli T, Vossen P. The event storyline corpus: A new benchmark fo ...

  5. 解决Tomcat catalina.out 不断膨胀,导致磁盘占用过大的问题

    到服务器上看了一下任务中心的日志情况,膨胀的很快,必须采取措施限制其增长速度. 我们采用Cronlog组件对此进行日志切分,官网http://cronolog.org/一直未能打开,只能从其它地方寻找 ...

  6. windows中实现python,redis服务自动重启(任务计划程序+bat脚本)

    需求:银行电脑无法自动开机,只能 通过 应用相关服务每天自动重启的方式实现 服务更新并且防止服务假死,内存过大 等情况 相关工具:win10系统中,使用windows自带的任务计划程序 和 bat脚本 ...

  7. 关于导入别人的web项目,tomcat无法显示的问题

    这两天头大,老师讲了javaWeb项目,讲完就给我们发了代码,我就想导入直接用,结果它tomcat的add and remove 里一直没有这个项目名字 刚导入还报错,这个可能我的版本太低了,兼容不了 ...

  8. Java 客户端负载均衡

    客户端侧负载均衡 在下图中,负载均衡能力算法是由内容中心提供,内容中心相对于用户中心来说,是用户中心的客户端,所以又被称为客户端侧负载均衡 自定义实现Client Random负载均衡 获取所有的服务 ...

  9. Java map笔记

    Map 是一个键值对的集合 花和尚 豹子头 鲁智深 林冲 如果想要从map中获得值,可以根据键 Map<Key,velue> Map虽然是集合,但是和collection的接口无关 我们可 ...

  10. 前端框架——树形结构Ztree的使用

    地址 官网:http://ztree.me 码云:https://gitee.com/zTree/zTree_v3 可以实现效果 使用方式 下载资源文件,引入到自己的项目中 <head> ...