• JAVA利用反射映射JSON对象为JavaBean


    关于将JSONObject转换为JavaBean,其实在JSONObject中有对于的toBean()方法来处理,还可以根据给定的JsonConfig来处理一些相应的要求,比如过滤指定的属性

    1. //返回true表示过滤掉该属性  
    2. jsonConfig.setJsonPropertyFilter(new PropertyFilter() {  
    3.     @Override  
    4.     public boolean apply(Object o, String n, Object v) {  
    5.         return false;         
    6.     }  
    7. });    

    给某些属性设置默认值
    1. //在序列化为json时,将Integer对象设为null  
    2. jsonConfig.registerDefaultValueProcessor(Integer.class,  
    3.     new DefaultValueProcessor() {  
    4.         @SuppressWarnings("unchecked")  
    5.         @Override  
    6.         public Object getDefaultValue(Class type) {  
    7.             return "";  
    8.         }  
    9. });  


    还有其它的一些有用的方法,这里就不一一介绍了...,但是在实际应用中,被转换为json对象的JavaBean中的属性,可能也是一个JSON对象或者JSON数组,但是在属性中是一个String类型。这样,在将json对象转换成JavaBean的过程中就会导致类型转换失败。查找了JsonConfig的方法,并没有找到可以在json-->bean的过程中将JSONObject或JSONArray处理为String的方法,因此只能使用反射来完成特殊对象的映射了。
    此处需要注意:
    1. 当JSONObject遇到Json串是null的时候,会返回JSONNUll  


    因此在判断为空的时候需要特别注意。
    代码如下
    1. public static ExamBLOBs parseJsonToExam(JSONObject obj) {  
    2.     ExamBLOBs exam = new ExamBLOBs ();  
    3.     try {  
    4.         List<Field> fieldList = new ArrayList<Field>();  
    5.         fieldList  
    6.                 .addAll(Arrays.asList(exam.getClass().getDeclaredFields()));  
    7.         for (Field field : fieldList) {  
    8.             String name = field.getName();  
    9.             Object value = obj.get(name);  
    10.             if (value != null && !(value instanceof JSONNull)) {  
    11.                 //使其可以对私有属性复制  
    12.                 field.setAccessible(true);  
    13.                 if (name.equalsIgnoreCase("Option")) {  
    14.                     JSONArray jArr = (JSONArray) value;  
    15.                     field.set(exam, jArr.toString());  
    16.                 } else {  
    17.                     String type = field.getType().toString();  
    18.                     if (type.indexOf("Integer") >= 0) {  
    19.                         field.set(exam, (Integer) value);  
    20.                     } else if (type.indexOf("String") >= 0) {  
    21.                         field.set(exam, (String) value);  
    22.                     } else if (type.indexOf("Date") >= 0) {  
    23.                         JSONObject dataObj = (JSONObject) value;  
    24.                         field.set(exam,  
    25.                                 JSONObject.toBean(dataObj, Date.class));  
    26.                     }  
    27.                 }  
    28.             }  
    29.         }  
    30.     } catch (SecurityException e) {  
    31.         e.printStackTrace();  
    32.     } catch (IllegalArgumentException e) {  
    33.         e.printStackTrace();  
    34.     } catch (IllegalAccessException e) {  
    35.         e.printStackTrace();  
    36.     }  
    37.     return exam;  
    38. }  


  • 相关阅读:
    Linux 安装Zookeeper<集群版>(使用Mac远程访问)
    04寻找两个数组的中位数
    28实现strSTR()
    125验证回文串
    124,二叉树中的最大路径和
    123买卖股票的最佳时机III
    02爬取豆瓣最受欢迎的250部电影
    01爬取当当网500本五星好评书籍
    112买卖股票的最佳时机II
    121.买卖股票的最佳时机
  • 原文地址:https://www.cnblogs.com/jpfss/p/8072148.html
Copyright © 2020-2023  润新知