日期:2014-05-16 浏览次数:20348 次
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,然后通 过