Jackson可以輕松的將java對象轉換成json對象和xml文檔,同樣也可以將json、xml轉換成Java對象。 相比json-lib框架,Jackson所依賴的jar包較少,簡單易用并且性能也要相對高些。而且Jackson社區相對比較活躍,更新速度也比較快。 一、準備工作
1、 下載依賴庫jar包
Jackson的jar all下載地址:http://mvnrepository.com/search?q=jackson 三個jackson全要
然后在工程中導入這個jar包即可開始工作
官方示例:http://wiki.fasterxml.com/JacksonInFiveMinutes
因為下面的程序是用junit測試用例運行的,所以還得添加junit的jar包。版本是junit_4.12.0
如果你需要轉換xml,那么還需要stax2-api.jar
2、 測試類基本代碼如下
package com.hoo.test;
import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.codehaus.jackson.JsonEncoding; import org.codehaus.jackson.JsonGenerationException; 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.codehaus.jackson.xml.XmlMapper; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.hoo.entity.AccountBean;
/** * Jackson 將java對象轉換成JSON字符串,也可以將JSON字符串轉換成java對象 */ @SupPRessWarnings(“unchecked”) public class JacksonTest { private JsonGenerator jsonGenerator = null; private ObjectMapper objectMapper = null; private AccountBean bean = null;
@Beforepublic void init() { bean = new AccountBean(); bean.setAddress("china-PJzz"); bean.setEmail("853029463@QQ.com"); bean.setId(1); bean.setName("PJzz"); objectMapper = new ObjectMapper(); try { jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(System.out, JsonEncoding.UTF8); } catch (IOException e) { e.printStackTrace(); }}@Afterpublic void destory() { try { if (jsonGenerator != null) { jsonGenerator.flush(); } if (!jsonGenerator.isClosed()) { jsonGenerator.close(); } jsonGenerator = null; objectMapper = null; bean = null; System.gc(); } catch (IOException e) { e.printStackTrace(); }}} 3、 所需要的JavaEntity
package com.hoo.entity;
public class AccountBean { private int id; private String name; private String email; private String address; private Birthday birthday;
//getter、setter@Overridepublic String toString() { return this.name + "#" + this.id + "#" + this.address + "#" + this.birthday + "#" + this.email;}} Birthday
package com.hoo.entity;
public class Birthday { private String birthday;
public Birthday(String birthday) { super(); this.birthday = birthday;}//getter、setterpublic Birthday() {}@Overridepublic String toString() { return this.birthday;}} 二、Java對象轉換成JSON
1、 JavaBean(Entity/Model)轉換成JSON
/** * 將java對象轉換成json字符串 */ @Test public void writeEntityJSON() {
try { System.out.println("jsonGenerator"); //writeObject可以轉換java對象,eg:JavaBean/Map/List/Array等 jsonGenerator.writeObject(bean); System.out.println(); System.out.println("ObjectMapper"); //writeValue具有和writeObject相同的功能 objectMapper.writeValue(System.out, bean);} catch (IOException e) { e.printStackTrace();}}
上面分別利用JsonGenerator的writeObject方法和ObjectMapper的writeValue方法完成對Java對象的轉換,二者傳遞的參數及構造的方式不同;JsonGenerator的創建依賴于ObjectMapper對象。也就是說如果你要使用JsonGenerator來轉換JSON,那么你必須創建一個ObjectMapper。但是你用ObjectMapper來轉換JSON,則不需要JSONGenerator。
objectMapper的writeValue方法可以將一個Java對象轉換成JSON。這個方法的參數一,需要提供一個輸出流,轉換后可以通過這個流來輸出轉換后的內容。或是提供一個File,將轉換后的內容寫入到File中。當然,這個參數也可以接收一個JSONGenerator,然后通過JSONGenerator來輸出轉換后的信息。第二個參數是將要被轉換的Java對象。如果用三個參數的方法,那么是一個Config。這個config可以提供一些轉換時的規則,過指定的Java對象的某些屬性進行過濾或轉換等。
2、 將Map集合轉換成Json字符串
/** * 將map轉換成json字符串 */ @Test public void writeMapJSON() { try { Map
新聞熱點
疑難解答