[在Java项目中將一个对象转换成一段Json格式的字符串是非常常见的,能够实现这种需求的工具包也比较多,例如Gson、JSON-lib、Jackson等等。本文主要介绍Jackson的使用,Jac
记得当时我在优化同事的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格式的互转
[Jackson解析的速度算是同类框架中最快的,同时也是Spring MVC中内置使用的解析方式。 准备工作: 下载jar包:http://jackson.codehaus.org/1.7.6/jackson-all-1.7.6.jarJ
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 = "";
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("").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"?>2222222123456
[Jackson 框架,轻易转换JSONJackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。相比json-lib框架,Jackson所依赖的jar包较少,