在使用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. 在SpringBoot中使用RabbitMQ

    目录 RabbitMQ简介 RabbitMQ在CentOS上安装 配置文件 实践 概述 Demo 遇到的BUG 启动异常 无法自动创建队列 RabbitMQ简介 wikipedia RabbitMQ在 ...

  2. Ural 2064:Caterpillars(思维暴力)

    http://acm.timus.ru/problem.aspx?space=1&num=2064 题意:有n只虫子在爬树,每个虫子往上爬ti距离后会往下掉落ti距离,每爬一个单位距离耗费一个 ...

  3. python异步IO编程(一)

    python异步IO编程(一) 基础概念 协程:python  generator与coroutine 异步IO (async IO):一种由多种语言实现的与语言无关的范例(或模型). asyncio ...

  4. .Net高级编程-自定义错误页 web.config中<customErrors>节点配置

    错误页 1.当页面发生错误的时候,ASP.Net会将错误信息展示出来(Sqlconnection的错误就能暴露连接字符串),这样一来不好看,二来泄露网站的内部实现信息,给网站带来安全隐患,因此需要定制 ...

  5. C语言学习推荐《C语言参考手册(原书第5版)》下载

  6. vue-cli · Failed to download repo vuejs-templates/webpack: self signed certificate in certificate chain

    vue init webpack <Project name> 报错: vue-cli · Failed to download repo vuejs-templates/webpack: ...

  7. reportlab生成pdf

    文档地址:https://www.reportlab.com/docs/reportlab-userguide.pdf 源码地址:https://bitbucket.org/rptlab/report ...

  8. 数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)

    前面我们介绍了队列.堆栈.链表,你亲自动手实践了吗?今天我们来到了树的部分,树在数据结构中是非常重要的一部分,树的应用有很多很多,树的种类也有很多很多,今天我们就先来创建一个普通的树.其他各种各样的树 ...

  9. MMM 状压dp学习记

    状压dp学习记 by scmmm 开始日期 2019/7/17 前言 状压dp感觉很好理解(本质接近于爆搜但是又有广搜的感觉),综合了dp的高效性(至少比dfs,bfs优),又能解决普通dp难搞定的问 ...

  10. KVM :vnc 远程控制kvm创建虚拟机

    一.vnc远程控制服务器 前期准备: 1.编辑/etc/hosts vi /etc/hosts 10.1.16.32 kvm 2.关闭防火墙 service iptables stop 3.关闭sel ...