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);
}
}