目标:
student的一个json字符串 : {"name":"张三","id":10001,"age":15}
转换为student对象 : Student(id=10001, name=张三, age=15)
直接上代码(有注释)
public <T> T str2Object(String jsonStr, Class<T> tClass) throws IllegalAccessException, InstantiationException {
// 获取 class 的实例
T t = tClass.newInstance();
// 将 json 字符串格式化为 jsonObject
JSONObject jsonObject = JSONObject.fromObject(jsonStr);
// 获取 class 的字段
Field[] fields = tClass.getDeclaredFields();
for (Field field : fields) {
// 通过反射进行获取实体类中的字段值
field.setAccessible(true);
// 获取字段的名称
String name = field.getName();
// 从 json 对象中获取字段的值
Object value = jsonObject.get(name);
if (value != null && value != "") {
// 获取属性的类型
// String type = field.getType().getName(); 这里的到的是 java.lang.Integer
// String fieldType = field.getType().getSimpleName(); 这里得到的是 Integer
String fieldType = field.getType().getSimpleName();
if ("Long".equals(fieldType) || "long".equals(fieldType)) {
// filed.set(t,value) 为对象 t 的filed 重新设置 value 值
field.set(t, Long.parseLong(value.toString()));
} else if ("Integer".equals(fieldType) || "int".equals(fieldType)) {
field.set(t, Integer.parseInt(value.toString()));
} else if ("String".equals(fieldType)) {
field.set(t, value.toString());
} else if ("Double".equals(fieldType) || "double".equals(fieldType)) {
field.set(t, Double.parseDouble(value.toString()));
} else if ("Boolean".equalsIgnoreCase(fieldType) || "boolean".equals(fieldType)) {
field.set(t, Boolean.parseBoolean(value.toString()));
} else if ("Date".equals(fieldType)) {
field.set(t, DateUtil.parseDate(value.toString()));
}
// todo 其他的数据类型没有做
}
}
return t;
}
测试通过: