Jackson_Java和Json/XML互转的开源框架

记得当时我在优化同事的Oauth能力开放项目的时候,需要把Java对象转化为Json和XML格式。当时是花了一天的时间,尝试了各种开源框架,最终选用了Jackson(官网:http://jackson.codehaus.org/)。它支持Java和Json格式的互转,同时也支持Java和XML的互转。它简单易用,而且通过简单的封装就可以适合项目的需求。

用到的Jar包:①jackson-all-1.9.5.jar、②jackson-xml-databind-0.6.0.jar、③stax2-api-3.1.1.jar

(下载地址:①http://jackson.codehaus.org/1.9.5/jackson-all-1.9.5.jar②http://www.jarvana.com/jarvana/archive-details/com/fasterxml/jackson-xml-databind/0.6.0/jackson-xml-databind-0.6.0.jar③http://repo1.maven.org/maven2/org/codehaus/woodstox/stax2-api/3.1.1/stax2-api-3.1.1.jar)


1、单例类,包括ObjectMapper 和 XMLMapper,分别用于实现Java和Json、XML格式的互转

package cn.eshore.pm.json;

import org.codehaus.jackson.map.ObjectMapper;
import com.fasterxml.jackson.xml.XmlMapper;

/**
*
* @author yehuanwen
*/
public class JacksonMapper {
   /**
    * can reuse, share globally
    */
   private static final ObjectMapper object = new ObjectMapper();
   
   /**
    * can reuse, share globally
    */
   private static final XmlMapper xml = new XmlMapper();
   
   /**
    * private constructor
    */
   private JacksonMapper() {
   }

   /**
    * return a ObjectMapper that is singleton
    * @return 
    */
   public static ObjectMapper getObjectMapper() {
       return object;
   }
   
   /**
    * return a XmlMapper that is singleton
    * @return 
    */
   public static XmlMapper getXmlMapper() {
       return xml;
   }
}

2、工具类,封装了Mapper里面的方法,实现Java对象转Json和XML

package cn.eshore.pm.json;

import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import com.fasterxml.jackson.xml.XmlMapper;

/**
 * 
 * @author yehuanwen
 */
public class JacksonUtils {

	public static void main(String[] args) {
		System.out.println("JacksonUtils...");
		Map nameValuePair = new TreeMap();
		nameValuePair.put("Account", "2222222");
		nameValuePair.put("pUserID", "123456");
		System.out.println(JacksonUtils.toJson(nameValuePair));
		System.out.println(JacksonUtils.toXML(nameValuePair,
				"getMobile_response"));
	}

	/**
	 * Object to XML, default root name is 'root'
	 * 
	 * @param nameValuePair
	 * @return
	 */
	public static String toXML(Object object) {
		return toXML(object, "root");
	}

	/**
	 * Object to XML
	 * 
	 * @param nameValuePair
	 * @param rootName
	 * @return
	 */
	public static String toXML(Object object, String rootName) {
		try {
			XmlMapper xml = JacksonMapper.getXmlMapper();
			// Object to XML
			String xmlStr = xml.writeValueAsString(object);
			String xmlHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
			// Object Class Name
			String mapClassName = object.getClass().getSimpleName();
			String beginStr = "<" + mapClassName + " xmlns=\"\">";
			String endStr = "</" + mapClassName + ">";
			int beginNum = beginStr.length();
			int endNum = xmlStr.indexOf(endStr);
			String subStr = xmlStr.substring(beginNum, endNum);
			StringBuffer sb = new StringBuffer();
			sb.append(xmlHeader).append("<" + rootName + ">").append(subStr)
					.append("</" + rootName + ">");
			return sb.toString();
		} catch (JsonGenerationException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * Object to Json
	 * 
	 * @param object
	 * @return
	 */
	public static String toJson(Object object) {
		try {
			ObjectMapper mapper = JacksonMapper.getObjectMapper();
			return mapper.writeValueAsString(object);
		} catch (JsonGenerationException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

}


运行结果:

JacksonUtils...
{"Account":"2222222","pUserID":"123456"}
<?xml version="1.0" encoding="UTF-8"?><getMobile_response><Account>2222222</Account><pUserID>123456</pUserID></getMobile_response>



你可能感兴趣的:(Jackson_Java和Json/XML互转的开源框架)