日期:2014-05-16 浏览次数:20453 次
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。
前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html
相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。
?
?
一、 准备工作
1、 下载依赖库jar包
Jackson的jar all下载地址:http://jackson.codehaus.org/1.7.6/jackson-all-1.7.6.jar
然后在工程中导入这个jar包即可开始工作
官方示例:http://wiki.fasterxml.com/JacksonInFiveMinutes
因为下面的程序是用junit测试用例运行的,所以还得添加junit的jar包。版本是junit-4.10
如果你需要转换xml,那么还需要stax2-api.jar
?
2、 测试类基本代码如下
?
package com.zhuc.javalibtest.jackson;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.JsonNodeFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* @author zhuc
* @version 2012-5-25 上午10:33:48
*/
public class JacksonTest {
private JsonGenerator jsonGenerator = null;
private ObjectMapper objectMapper = null;
/**
*
*/
@Before
public void init() {
objectMapper = new ObjectMapper();
try {
jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(
System.out, JsonEncoding.UTF8);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
*/
@After
public void destory() {
try {
if (jsonGenerator != null) {
jsonGenerator.flush();
if (!jsonGenerator.isClosed()) {
jsonGenerator.close();
}
}
jsonGenerator = null;
objectMapper = null;
System.gc();
} catch (IOException e) {
e.printStackTrace();
}
}
}
?
package com.zhuc.javalibtest.jackson;
/**
* @author zhuc
* @version 2012-5-25 上午11:14:52
*/
public class Car {
private String name;
private Integer capacity;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the capacity
*/
public Integer getCapacity() {
return capacity;
}
/**
* @param capacity
* the capacity to set
*/
public void setCapacity(Integer capacity) {
this.capacity = capacity;
}
}
?
二、 Java 对象转换成 JSON
1、 JavaBean(Entity/Model)转换成JSON
?
/**
* 将javaBean对象转换成json字符串
*/
@Test
public void writeEntityJSON() {
try {
System.out.println("jsonGenerator");
// writeObject可以转换java对象,eg:JavaBean/Map/List/Array等
Car c = new Car();
c.setName("zhuc-jackson-car");
c.setCapacity(100);
jsonGenerator.writeObject(c);
System.out.println();
System.out.println("ObjectMapper");
// writeValue具有和writeObject相同的功能
objectMapper.writeValue(System.out, c);
} catch (IOException e) {
e.printStackTrace();
}
}
?
运行后结果如下:
jsonGenerator
{"name":"zhuc-jackson-car","capacity":100}
ObjectMapper
{"name":"zhuc-jackson-car","capacity":100}
?
?
????? 上面分别利用JsonGenerator的writeObject方法和ObjectMapper的writeValue方法完成对Java对象的 转换,二者传递的参数及构造的方式不同;JsonGenerator的创建依赖于ObjectMapper对象。也就是说如果你要使用 JsonGenerator来转换JSON,那么你必须创建一个ObjectMapper。但是你用ObjectMapper来转换JSON,则不需要 JSONGenerator。
????? objectMapper的writeValue方法可以将一个Java对象转换成JSON。这个方法的参数一,需要提供一个输出流,转换后可以通 过这个流来输出转换后的内容。或是提供一个File,将转换后的内容写入到File中。当然,这个参数也可以接收一个JSONGenerator,然后通 过