net.sf.json.JSONObject为我们提供了toBean方法用来转换为JAVA对象, 功能更为强大,  这里借鉴采用JDK的反射机制, 作为简单的辅助工具使用,   有些数据类型需要进行转换, 根据需要进行扩展,  这里可以处理Long和Date类型.

只支持单个JSONObject对象的处理,   对于复杂的JSON对象, 如JSONArray数组, 可考虑先遍历, 获取JSONObject后再进行处理.

  1. package common;
  2.  
  3. import java.lang.reflect.Method;
  4. import java.text.SimpleDateFormat;
  5. import net.sf.json.JSONObject;
  6.  
  7. /**
  8. * 辅助处理工具
  9. *
  10. */
  11. public class AssistantUtil
  12. {
  13.  
  14. private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  15.  
  16. /**
  17. * 把JSON数据转换成JAVA对象
  18. * description: 函数的目的/功能
  19. */
  20. public static void setJsonObjData(Object obj, JSONObject data, String[] excludes) throws Exception
  21. {
  22.  
  23. // 反射获取所有方法
  24. Method[] methods = obj.getClass().getDeclaredMethods();
  25. if (null != methods)
  26. {
  27.  
  28. for (Method m : methods)
  29. {
  30.  
  31. String methodName = m.getName();
  32.  
  33. if (methodName.startsWith("set"))
  34. {
  35.  
  36. methodName = methodName.substring(3);
  37. // 获取属性名称
  38. methodName = methodName.substring(0, 1).toLowerCase() + methodName.substring(1);
  39.  
  40. if (!methodName.equalsIgnoreCase("class") && !isExistProp(excludes, methodName))
  41. {
  42.  
  43. try
  44. {
  45.  
  46. m.invoke(obj, new Object[] { data.get(methodName) });
  47. }
  48. catch (IllegalArgumentException e1)
  49. {
  50. if(m.getParameterTypes()[0].getName().equals("java.lang.Long")){
  51. m.invoke(obj, new Object[] { Long.valueOf(data.get(methodName).toString())});
  52. }else if(m.getParameterTypes()[0].getName().equals("java.util.Date")){
  53. m.invoke(obj, new Object[] {data.containsKey(methodName)? sdf.parse(data.get(methodName).toString()) : null}); }
  54. }
  55. catch (Exception e)
  56. {
  57.  
  58. }
  59.  
  60. }
  61. }
  62. }
  63. }
  64.  
  65. }
  66.  
  67. private static boolean isExistProp(String[] excludes, String prop)
  68. {
  69.  
  70. if (null != excludes)
  71. {
  72.  
  73. for (String exclude : excludes)
  74. {
  75. if (prop.equals(exclude))
  76. {
  77. return true;
  78. }
  79. }
  80. }
  81. return false;
  82. }
  83.  
  84. }

利用JAVA反射机制将JSON数据转换成JAVA对象的更多相关文章

  1. 利用Java反射机制将Bean转成Map

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...

  2. 将JSON数据转换成JAVA的实体类

    思路:首先将JSON格式的数据转换成JSONObject,然后将JSONObject转换成Java的实体类(其中类属性包括List等类型) Java实体类: SearchFilter 类 1 publ ...

  3. 利用java反射机制编写solr通用的java客户端

    一.前言 通过上一篇的讲解,我们知道了dynamicFiled字段,它是动态的,不需要显示的声明.而且一些常用的基本类型solr已经默认给我们创建好了. 例如:*_i,*_is,等. 如果我们要使用动 ...

  4. JAVA反射机制_获取字节码文件对象

    是在运行状态中,对于任意一个类 (class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...

  5. Java反射机制(三):调用对象的私有属性和方法

    一. 通过反射调用类中的方法 在正常情况下,得到类的对象后,我们就可以直接调用类中的方法了,如果要想调用的话,则肯定必须清楚地知道要调用的方法是什么,之后通过Class类中的getMethod方法,可 ...

  6. 【java提高】---java反射机制

    java反射机制 一.概述 1.什么是反射机制 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态 ...

  7. java反射机制的简单介绍

    参考博客: https://blog.csdn.net/mlc1218559742/article/details/52754310 先给出反射机制中常用的几个方法: Class.forName (& ...

  8. Java 反射机制及Annotation

    转自:http://justjavac.iteye.com/blog/714654 Java 反射是 Java 语言的一个很重要的特征. 它允许运行中的 Java 程序对自身进行检查,并能直接操作程序 ...

  9. 一个例子让你了解Java反射机制

    本文来自:blog.csdn.net/ljphhj JAVA反射机制: 通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运 ...

随机推荐

  1. 超炫的3D翻转模板

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 批量文本读取URL获取正常访问且保留对应IP

    #coding=utf-8 import sys import requests for i in range(3000,4999,1): url = 'http://192.168.88.139:8 ...

  3. hibernate 表配置文件如何设置表字段的默认值

    修改对应实体类的配置文件,比如说 public class User{ private int age; //setter //getter } 配置文件 <property name=&quo ...

  4. 夺命雷公狗---2016-linux---1之ip的配置

    在linux下输入以下命令即可配置成功, 但是前提是linux下的这个ip地址的ip段是通过本地ping出来的才可以,如下所示: 然后查看下是否配置成功: 已经配置成功了,那么下一步我们可以ping下 ...

  5. [JAVA]在linux中设置JDK环境,ZendStudio,Eclipse

    1.准备JDK安装包 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载对应平台的tar.gz格式压 ...

  6. 给图像添加logo

    #include <opencv2\opencv.hpp>#include"ProcessPixels.h"using namespace cv;using names ...

  7. java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr

    BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWri ...

  8. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

  9. Understanding the RelationshipType Enumeration [AX 2012]

    Understanding the RelationshipType Enumeration [AX 2012] 3 out of 3 rated this helpful - Rate this t ...

  10. Maven之Nexus构建企业级Maven仓库

    什么是Nexus? Nexus是Maven仓库管理器,用来搭建一个本地仓库服务器,这样做的好处是便于管理,节省网络资源,速度快,还有一个非常有用的功能就是可以通过项目的SNAPSHOT版本管理,来进行 ...