日期:2014-05-16 浏览次数:20433 次
利用反射机制获取类的信息,然后将所得的信息,转化成JSON数据,方便传输或者生产xml文件
下面是我的实现方法,办法有点笨,欢迎指正,就是生产xml文件的是很,不知道怎么样修改配置信息,比如
<property name=" " /> 我这里生成的都是mxlls之类的信息,不知道怎么需要改,先放着再说,遇到解决的是很在回来修改。
package com.lzb.common; import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * * 功能描述:Java POJO转换成JSON字符串,或者XML * * @author lizhenbin * * <p>修改历史:(修改人,修改时间,修改原因/内容)</p> */ public class EntityChanageXmlJson { private static final String SPLIT_STR = ":"; private static final String KV_STR = ","; private static final String JSON_LEFT = "{"; private static final String JSON_RIGHT = "}"; private static final String SPLIT = "\""; private static final String PROP_SPLIT = ";"; private static final String XML_FIELD = "field"; private static final String XML_PROPERTY = "property"; private static final String XML_VALUE = "value"; private static EntityChanageXmlJson instance = null; public EntityChanageXmlJson() {}; public static synchronized EntityChanageXmlJson getInstance() { if(instance==null) instance = new EntityChanageXmlJson(); return instance; } /** * * 功能描述:将POJO的转化成json字符串形式, POJO的属性只可以是public的简单属性 * * @author lizhenbin * <p>创建日期 :May 7, 2012 12:38:31 PM</p> * * @param obj 转成为json的POJO对象 * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public static String pojoToJson(Object obj) { if(obj==null) { return null; } Map<Map<String,Object>,String> clazzmap = new HashMap<Map<String, Object>, String>(); /** * Java的反射机制获取类的信息 */ Class clazz = obj.getClass(); Field[] fields = clazz.getFields(); /** * 将Class的值放到map */ for(Field f : fields) { String key = f.getName(); String type = f.getType().getSimpleName(); Object value = null; try { value = f.get(obj); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } Map<String, Object> kvmap = new HashMap<String, Object>(); kvmap.put(key, value); clazzmap.put(kvmap, type); } /** * 构建json格式 */ if(clazzmap!=null) { String json = null; StringBuilder sb = new StringBuilder(); sb.append(JSON_LEFT); Set<Map<String, Object>> keySet = clazzmap.keySet(); for(Map<String, Object> skey : keySet) { Set<String> kvSet = skey.keySet(); for(String s : kvSet) { sb.append(SPLIT + s + SPLIT); sb.append(KV_STR); sb.append(SPLIT + skey.get(s) + SPLIT + SPLIT_STR); // 根据需求可以返回类型 // sb.append(SPLIT + clazzmap.get(skey) + SPLIT + PROP_SPLIT); } } sb.deleteCharAt(sb.toString().length()-1); sb.append(JSON_RIGHT); return sb.toString(); } return null; } /** * * 功能描述: 将简单的POJO转为xml形式 * * @author lizhenbin * <p>创建日期 :May 8, 2012 6:30:16 PM</p> * * @param obj 转成为xml的POJO对象 * @param path 生成xml存放的位置 * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public static boolean pojoToXml(Object obj, String path) { Map<Map<String,Object>,String> clazzmap = new HashMap<Map<String, Object>, String>(); Class clazz = obj.getClass(); Field[] fields = clazz.getFields(); Object value = null; for(Field f : fields) { String key = f.getName(); try { value = f.get(obj); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) {