https://git.oschina.net/vigiles/CommonJsonSharpUtil
https://github.com/731942771/CommonJsonSharpUtil
CGLIB,https://github.com/cglib/cglib,一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。
在http://www.gaohaiyan.com/1766.html《使用反射创建通用JSON解析工具》的基础上,使用cglib动态创建javabean类,然后对json解析结果进行封装。BeanFactory类用于创建bean对象,其中关键用到BeanGenerator、BeanMap。
注意引入cglib-nodep-*.jar文件。
这里展示下关键代码,具体看上面提供的github和oschina上的开源项目。
BeanFactory类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
package com.cuiweiyou.xianke.util; import java.util.Iterator; import java.util.Map; import java.util.Set; import net.sf.cglib.beans.BeanGenerator; import net.sf.cglib.beans.BeanMap; /** * 创建Bean */ public class BeanFactory { /** Bean实体 */ public Object object = null; /** 全部属性的实体数据(属性名-值)集合 */ public BeanMap beanMap = null; /** 全部属性的值拼接字串 */ private StringBuilder sb2string = new StringBuilder(); /** * 创建Bean * 得到Bean的属性实体集合 * @param propertyMap 全部属性的元数据(属性名-属性数据类型)的集合 */ public BeanFactory(Map<String, Class> propertyMap) { this.object = generateBean(propertyMap); this.beanMap = BeanMap.create(this.object); sb2string.append(object.getClass().getSimpleName() + " ["); } /** * 生成bean实体 * @param propertyMap bean实体属性的集合 * @return bean实体 */ private Object generateBean(Map<String, Class> propertyMap) { // cglib中的bean生成器 BeanGenerator generator = new BeanGenerator(); Set<String> keySet = propertyMap.keySet(); for (Iterator<String> i = keySet.iterator(); i.hasNext();) { String key = i.next(); // 添加属性。(属性名,属性的数据类型) generator.addProperty(key, propertyMap.get(key)); } return generator.create(); } /** * 给bean的属性赋值 * @param property 属性名 * @param value 值 */ public void setValue(String property, Object value) { beanMap.put(property, value); sb2string.append(property + "=" + value.toString() + ", "); } /** * 得到bean属性的值 * @param property 属性名 * @return 值 */ public Object getValue(String property) { return beanMap.get(property); } /** * 得到bean对象 * @return Bean实体 */ public Object getObject() { return this.object; } /** * Bean转为字符串 */ @Override public String toString(){ int lastIndex = sb2string.lastIndexOf(","); sb2string.replace(lastIndex, sb2string.length(), ""); sb2string.append("]"); return sb2string.toString(); } } |
json数据的格式和前文一样,{"BeanName", {"key":"value", "k2":"v2"}} 。
但是本升级后的版本里,BeanName没有用了,同时value还限于String类型。
继续升级应该匹配Integer、Double等数字类型,Boolean类型,List/Map类型。
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/1772.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设