java使用反射将json对象转换为java对象

JSONObject jsonObject=JSONObject.fromObject(objectStr);
Student stu=(Student)JSONObject.toBean(jsonObject, Student.class);

因代码需求,不能用以上语句转换,所以也不要问我为什么不简单些。。
代码入下:
public class test {
	public String aaa="123";
	
	public String bbb;
	
	private String ccc;

	public static void main(String[] args){
		test te=new test(JSONObject.parseObject("{\"aaa\":\"321\",\"ccc\":\"321\"}"));
		System.out.println("aaa="+te.aaa);
		System.out.println("bbb="+te.bbb);
		System.out.println("ccc="+te.ccc);
	}
	
	public test(JSONObject object){
		try {
			Field[] fields = this.getClass().getDeclaredFields();
           
			for (int i = 0; i < fields.length; i++) {
				fields[i].setAccessible(true);
				Class<?> typeClass = fields[i].getType();
				Constructor<?> con = typeClass.getConstructor(typeClass);
				Object value = con.newInstance(NotNull(object.getString(fields[i].getName())));
				fields[i].set(this, value);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public String NotNull(String temp){
		if(temp==null){
			return "";
		}
		return temp;
	}
}

输入结果如下:


值得注意的是,如果通过调用父类构造方法反射字段,所映射的只是子类所拥有的字段,如下面代码所示:
public class etest extends test{
	
	public etest(JSONObject object) {
		super(object);
		// TODO Auto-generated constructor stub
	}

	public String sa;
	
	
	protected String sa3;
	
	public static void main(String[] args){
		etest te=new etest(JSONObject.parseObject("{\"aaa\":\"321\",\"bbb\":\"321\",\"sa\":\"321\"}"));
		System.out.println("sa="+te.sa);
		System.out.println("aaa="+te.aaa);
		System.out.println("bbb="+te.bbb);
       }
}



猜你喜欢

转载自blog.csdn.net/u012934723/article/details/78465538