日期:2014-05-16  浏览次数:20433 次

将简单的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) {