请通过浏览器功能收藏网页

通过反射技术动态解析JSON数据 实用小功能

发布时间:2018-06-20 12:18:08  作者:本站编辑  来源:本站原创  浏览次数:
www.javainfo.com.cn 上干货 欢迎收藏


          函数所示:传入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