通过反射技术动态解析JSON数据 实用小功能
函数所示:传入JSON 字符串对象,将JSON数据解析成JAVA对象
通过这样的函数,我们不需要对对象的每个属性进行单独设置值。
public static List getObject2(StringBuilder builder) {
JSONObject jobj = JSON.parseObject(builder.toString());
JSONArray jsonArray = jobj.getJSONArray("d");
List<Volume> listVolume = new ArrayList<Volume>();
Volume v = null;
try {
//这里提升到参数级别,则此方法会变成一个通用函数
Class c = Class.forName("com.jeecms.cms.action.fangchan.model.Volume");
c.newInstance(); // 生成类的对象, 并赋值
// 为整个对象 的每个属性赋值
Field[] fields = c.getDeclaredFields();
// 迭代去除对象的属性
for (int i = 0; i < jsonArray.size(); i++) {
// 整个对象的字符串
JSONObject json1 = (JSONObject) jsonArray.get(i);
v = new Volume();
for (Field field : fields) {
// 如此动态的 显示, 类的所有的属性值
// 动态组成类的属性 fx: CompanyId , CompanyName ....
String fildname = field.getName().substring(0, 1)
.toUpperCase()
+ field.getName().substring(1);
// System.out.println(json1.get(fildname));
Object fildVal = (Object) json1.get(fildname);
// 调用getDeclaredField("name") 取得name属性对应的Field对象
Field f = c.getDeclaredField(field.getName());
// 取消属性的访问权限控制,即使private属性也可以进行访问。
f.setAccessible(true);
//调用set()方法给对应属性赋值。
f.set(v, fildVal); // 相当于obj.setName("lkl");
}
// 装入容器
listVolume.add(v);
}
} catch (Exception e) {
e.printStackTrace();
}
return listVolume;
}
如有疑问 请留言 欢迎提供建议
评论已有 0 条