首页 > 其他分享 >使用反射对实体类赋值

使用反射对实体类赋值

时间:2022-08-17 18:12:46浏览次数:53  
标签:反射 实体类 jsonkey String jsonObject reflectionObj dataJson reflectionclazz 赋值

JSON字符串

{
  "data":{
	  "PD01":{
		  "KEY1":"1",
		  "KEY2":"2",
		  "KEY3":"3"
	  },
	  "PD02":{
		  "KEY4":"4",
		  "KEY5":"5"
	  },
	  "PD03":{
		  "KEY6":"6"
	  }
}
}

实体类

@Data
public class ReflectionObj {

    private String KEY1;
    private String KEY3;
    private String KEY4;
    private String KEY6;
    private String KEY7;

}

关键步骤

1.遍历json字符串
String jsonkey : jsonObject.keySet()
2.获取实体类字段
Field field = reflectionclazz.getDeclaredField(jsonkey);
3.赋值
field.set(reflectionObj,jsonObject.getString(jsonkey));

参考demo

public class Reflection {

    public static void main(String[] args) throws IllegalAccessException, InstantiationException {
        JSONObject jsonObject = JSON.parseObject("{\"data\":{\"PD01\":{\"KEY1\":\"1\",\"KEY2\":\"2\",\"KEY3\":\"3\"},\"PD02\":{\"KEY4\":\"4\",\"KEY5\":\"5\"},\"PD03\":{\"KEY6\":\"6\"}}}");
        Class reflectionclazz = ReflectionObj.class;
        Object reflectionObj = reflectionclazz.newInstance();
        Reflection reflection = new Reflection();

        if(jsonObject.containsKey("data")){
            JSONObject dataJson = jsonObject.getJSONObject("data");
            if(dataJson.containsKey("PD01")){
                reflection.savedata(reflectionclazz,reflectionObj,dataJson,"PD01");
            }
            if(dataJson.containsKey("PD02")){
                reflection.savedata(reflectionclazz,reflectionObj,dataJson,"PD02");
            }
            if(dataJson.containsKey("PD03")){
                reflection.savedata(reflectionclazz,reflectionObj,dataJson,"PD03");
            }
            System.out.println(JSONArray.toJSONString(reflectionObj));
        }


        }
    public void savedata(Class reflectionclazz,Object reflectionObj,JSONObject dataJson,String key) {
        JSONObject jsonObject = dataJson.getJSONObject(key);
        for (String jsonkey : jsonObject.keySet()) {
            try {
                Field field = reflectionclazz.getDeclaredField(jsonkey);
                field.setAccessible(true);
                field.set(reflectionObj,jsonObject.getString(jsonkey));
            } catch (Exception e) {
                continue;
            }
        }
    }

}

打印结果

{"kEY1":"1","kEY3":"3","kEY4":"4","kEY6":"6"}

标签:反射,实体类,jsonkey,String,jsonObject,reflectionObj,dataJson,reflectionclazz,赋值
From: https://www.cnblogs.com/yorkiiz/p/16596239.html

相关文章

  • Unity3d反射(Reflection)
    无论是VR、AR,还是游戏开发,都绕不开反射材质,一些童鞋说用反射探测器(ReflectionProbe)制作反射,总感觉地板的反射不正确,本文小姐姐就这一话题,和大家一起探讨一下反射材质的制......
  • python基础——超类&反射&装饰器&生成器
    一、超类1.1什么时候用到超类?如果子类需要复用父类的代码(属性、代码)时,需要通过超类实现classA:class_name="A"#类的属性def__init__(self,name,......
  • JavaSE:第十三章:一分钟了解反射
    首先分享一篇关于反射的博文,因为我发现这篇博文写的很详细,然后开始我的表演:首先学习反射之前,我要提出疑问:反射是个什么东西?它是用来做什么的?平时的应用场景有哪些?为啥......
  • 【JAVA反序列化_一】反射基础
    image-20220816132943277【JAVA反序列化_一】反射基础须知:​这个图相信不陌生,是shiro反序列化利用工具,其中这利用链说实话当我第一次见的时候满脸问号,于是就想探究......
  • Go语言反射reflect标准库03-通过反射获取值信息相关操作
    通过反射获取值信息当我们将一个接口值传递给一个reflect.ValueOf函数调用时,此调用返回的是代表着此接口值的动态值的一个reflect.Value值。我们必须通过间接的途径......
  • Go语言反射reflect标准库03-通过反射获取类型信息相关操作
    10.3通过反射获取类型信息在Go语言中通过调用reflect.TypeOf函数,我们可以从一个任何非接口类型的值创建一个reflect.Type值。reflect.Type值表示着此非接口值的类......
  • python3:面向对象之成员变量(成员变量赋值为元组、字典)
    python3:面向对象之成员变量(成员变量赋值为元组、字典)    一、python3源码  1#!/usr/bin/python323classdata:45#python是“弱类型......
  • 解构赋值
        //解构赋值:分为数组和对象的解构赋值,对象的解构赋值是最长用的    let[a,b]=[10,20]    console.log(a)    console.log(b)......
  • 长篇图解java反射机制及其应用场景
    一、什么是java反射?在java的面向对象编程过程中,通常我们需要先知道一个Class类,然后new类名()方式来获取该类的对象。也就是说我们需要在写代码的时候(编译期或者编译期之......
  • 注解和反射之动态创建对象执行方法
    点击查看代码packagecom.kuang.reflection;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.InvocationTarget......