将简单的POJO转化为JSON或者XML
利用反射机制获取类的信息,然后将所得的信息,转化成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) {e.printStackTrace();}Map<String, Object> kvmap = new HashMap<String, Object>();kvmap.put(key, value);String type = f.getType().getName();clazzmap.put(kvmap, type);}/** * 生成xml */try {/** * 初始化,使用dom生成xml,类的属性 */Document doc = null;DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();DocumentBuilder docBuilder = dbfactory.newDocumentBuilder();;doc = docBuilder.newDocument();/** * 创建XML的根节点(根),XML的根节点 */Element root = doc.createElementNS(clazz.getName(), clazz.getSimpleName()); doc.appendChild(root);Element field = doc.createElementNS(XML_FIELD, XML_PROPERTY);root.appendChild(field);Set<Map<String,Object>> keySetMap = clazzmap.keySet();for(Map<String,Object> smap : keySetMap) {Set<String> keySet = smap.keySet();for(String s : keySet) {Element property = doc.createElementNS(s, XML_PROPERTY);field.appendChild(property);Element _child = doc.createElementNS(clazzmap.get(smap), XML_VALUE);_child.appendChild(doc.createTextNode(String.valueOf(smap.get(s))));property.appendChild(_child);}}/** * 结束拼凑XML,输出xml */TransformerFactory tff = TransformerFactory.newInstance();Transformer transformer = tff.newTransformer();File file = new File(path);FileOutputStream out = new FileOutputStream(file);StreamResult xmlResult = new StreamResult(out);transformer.setOutputProperty(OutputKeys.INDENT, "yes");transformer.transform(new DOMSource(doc), xmlResult);return true;} catch (Exception e) {e.printStackTrace();return false;}}}?