首页 > 其他分享 >JSON 转复杂对象

JSON 转复杂对象

时间:2022-09-28 17:00:45浏览次数:46  
标签:复杂 对象 Object value JSON fieldName desObj null desC

public  static Object copyProperties(JSONObject oriObj, Object desObj) {
        //1. 首先要拿到oriObj对象的所有存在值不为空的键-值,放入到集合当中
         Class desC = desObj.getClass();
         Field[] desFields=desC.getDeclaredFields();
        for (Map.Entry<String, Object> entry:oriObj.entrySet()){
            String fieldName  = entry.getKey();
            Object value  = entry.getValue();
            Class<?> type = value.getClass();//字段的类型

            String getMethodName="get"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1,fieldName.length());
            try {
                if(value!=null){
                    //此处需要进行比对desObj中是否存在有相同名称的key
                    for (Field desField:desFields) {
                        //如果被替换对象中值不为空, 则跳过
                        if(desField.getName().equals(fieldName)){
                            if( value instanceof JSONObject   ){
                                Method getMethod2 = desC.getMethod(getMethodName,null);
                                Object o =getMethod2.invoke(desObj);
                                copyProperties((JSONObject) value,  o );
                            } else {
                                String setMethodName = "set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1, fieldName.length());
                                Method setMethod = null;
                                setMethod = desC.getMethod(setMethodName, desField.getType());
                                setMethod.invoke(desObj, value);
                            }
//                            Method getMethod2 = desC.getMethod(getMethodName,null);
//                            Object value2=getMethod2.invoke(o);//获取得到该属性的取值
//                            if(value2 != null ){
//                                continue;
//                            }
                            //2. 对desObj的键值进行赋值操作

                        }
                    }
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
        }
        return desObj;
    }

 

标签:复杂,对象,Object,value,JSON,fieldName,desObj,null,desC
From: https://www.cnblogs.com/heshana/p/16738678.html

相关文章

  • 实验1 类和对象(1)
    实验目的通过实践,加深对类、对象的理解,能够解释类的抽象、封装所指,能够描述什么是类的接口能够使用C++语法规则正确定义、实现、测试类能够使用C++语法规则正确创建对......
  • 自定义toString()方法检测对象类型时的返回值[object x](JS)
    如果想通过 Object.prototype.toString()方法来检测对象类型,则需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用toString()方法。......
  • 实验1 类和对象(1)
    实验任务二1.源码1#include<iostream>2usingnamespacestd;34classPoint{5public:6Point(intx0=0,inty0=0);7Point(constPoint&......
  • while循环,for循环,range对象
    目录今日内容概要今日内容详细1.作业讲解2.while循环补充说明3.流程控制之for循环4.range方法5.range实战案例6.作业今日内容概要1.作业讲解2.while循环补充说明3.流......
  • 把两个数据结构相同的数组(数组下有n个对象)合并成一个数组
    数据拼接有一个数组letarr1=[{name:''lili",age:14},{name:''小明",age:16},{name:''张三",age:24},]letarr2=[{class:"初一二班",gender:"0"},{class:"初......
  • 购物车程序的面向对象设计
    ​1.人员分工类1、类2、类3、类4,罗晨珊2.前期调查先在商城(Mall)中,浏览所有商品或查找某一商品,然后将商品加入购物车(Cart)中,可以在购物车内进行商品数量的增加、减少、清......
  • 对equals的使用,完成对输入对象的选择
    今天也算是有纪念意义的一天——自己敲出来一个代码。本来昨天下午的时候就想把这个代码给敲出来,但是奈何基础不牢,地动山摇。搞了一下午还是没有一个满意的结果,今天重新刷......
  • MYSQL中的json数据操作
    1.2基础查询操作用法提示:如果json字符串不是数组,则直接使用$.字段名如果json字符串是数组[Array],则直接使用$[对应元素的索引id]1.2.1一般json查询使用 json字段......
  • docker配置阿里云加速器(修改daemon.json后缀为conf)
    问题:docker无法拉取镜像,根据网上教程添加 /etc/docker/daemon.json后仍然失败。解决方法:将daemon.json文件名改为daemon.conf 后成功解决问题。网上常见配置方......
  • orm基于对象的查询和基于Queryset的查询
    1importos234if__name__=='__main__':5os.environ.setdefault("DJANGO_SETTINGS_MODULE","bbs.settings")#可从manage.py文件复制粘贴67......