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

本文介绍如何使用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所需要的所有jar jackson-all-1.6.2.jar jackson-core-asl-1.6.2.jar jackson-mapper-asl-1.6.2.jar jakarta-oro.jar 1. 背景 目前维护的产品使用jackson处理json,现整理一下jackson相关资料,希望对初次接触jackson的新手有所帮助。 jackson主页: http://jackson.codehaus.org/ jackson document: http://wiki.fasterxml.com/JacksonJavaDocs JacksonInFiveMinutes: http://wiki.fasterxml.com/JacksonInFiveMinutes 本文主要内容译自JacksonInFiveMinutes,增加了部分示例,转载请注明出处。 受java平台上各种处理xml的类库(StAX, JAXB等)启发,Jackson提供一种处理jsonjava类库。Jackson的目标是为开发者提供快速、准确、轻量级用起来最爽的json处理类库。本文将概括介绍Jackson的主要功能相关功能的使用示例。 2. 使用方式 Jackson提供三种可选的json处理方式: 1) Streaming API 又称Incremental parsing/generation, 受StAX API启发,以非关联递增方式读写json内容。 通过 org.codehaus.jackson.JsonParser读取,通过org.codehaus.jackson.JsonGenerator写入。 2) Tree Model 通过基于内存的树形结构来描述json数据, XML DOM类似。通过org.codehaus.jackson.map.ObjectMapper构建树,树由JsonNode节点组成。 3) Data Binding 基于属性访问或注解的方式将jsonPOJO对象互相转换, 受JAXB基于注解的处理方式启发。通过org.codehaus.jackson.map.ObjectMapper读写json数据。它含两种类型: 3.1 Simple Data Binding 用于jsonJava Maps, Lists, Strings, Numbers, Booleans and nulls的相互转换。 3.2 Full Data Binding 用于jsonJava Bean的相互转换。 下面从使用的角度上比较三种处理方式: Streaming API 执行效率最高,读写速度最快,另外两种方式都基于它实现; Tree Model 是最灵活的; Data Binding 通常是最方便使用的;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值