Jackson 框架,輕易轉(zhuǎn)換JSON
Jackson可以輕松的將java對象轉(zhuǎn)換成json對象和xml文檔,同樣也可以將json、xml轉(zhuǎn)換成Java對象。
前面有介紹過json-lib這個框架,在線博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html
相比json-lib框架,Jackson所依賴的jar包較少,簡單易用并且性能也要相對高些。而且Jackson社區(qū)相對比較活躍,更新速度也比較快。
一、準(zhǔn)備工作
1、 下載依賴庫jar包
Jackson的jar all下載地址:http://jackson.codehaus.org/1.7.6/jackson-all-1.7.6.jar
然后在工程中導(dǎo)入這個jar包即可開始工作
官方示例:http://wiki.fasterxml.com/JacksonInFiveMinutes
因?yàn)橄旅娴某绦蚴怯胘unit測試用例運(yùn)行的,所以還得添加junit的jar包。版本是junit-4.2.8
如果你需要轉(zhuǎn)換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;
/** * function:Jackson 將java對象轉(zhuǎn)換成JSON字符串,也可以將JSON字符串轉(zhuǎn)換成java對象 * jar-lib-version: jackson-all-1.6.2 * jettison-1.0.1 * @author hoojo * @createDate 2010-11-23 下午04:54:53 * @file JacksonTest.java * @package com.hoo.test * @PRoject Spring3 * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ @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-Guangzhou"); bean.setEmail("hoojo_@126.com"); bean.setId(1); bean.setName("hoojo"); 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對象轉(zhuǎn)換成JSON
1、 JavaBean(Entity/Model)轉(zhuǎn)換成JSON
/** * function:將java對象轉(zhuǎn)換成json字符串 * @author hoojo * @createDate 2010-11-23 下午06:01:10 */ @Test public void writeEntityJSON() {
try { System.out.println("jsonGenerator"); //writeObject可以轉(zhuǎn)換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();}} 運(yùn)行后結(jié)果如下:
jsonGenerator {“address”:”china-Guangzhou”,”name”:”hoojo”,”id”:1,”birthday”:null,”email”:”hoojo_@126.com”} ObjectMapper {“address”:”china-Guangzhou”,”name”:”hoojo”,”id”:1,”birthday”:null,”email”:”hoojo_@126.com”} 上面分別利用JsonGenerator的writeObject方法和ObjectMapper的writeValue方法完成對Java對象的轉(zhuǎn)換,二者傳遞的參數(shù)及構(gòu)造的方式不同;JsonGenerator的創(chuàng)建依賴于ObjectMapper對象。也就是說如果你要使用JsonGenerator來轉(zhuǎn)換JSON,那么你必須創(chuàng)建一個ObjectMapper。但是你用ObjectMapper來轉(zhuǎn)換JSON,則不需要JSONGenerator。
objectMapper的writeValue方法可以將一個Java對象轉(zhuǎn)換成JSON。這個方法的參數(shù)一,需要提供一個輸出流,轉(zhuǎn)換后可以通過這個流來輸出轉(zhuǎn)換后的內(nèi)容。或是提供一個File,將轉(zhuǎn)換后的內(nèi)容寫入到File中。當(dāng)然,這個參數(shù)也可以接收一個JSONGenerator,然后通過JSONGenerator來輸出轉(zhuǎn)換后的信息。第二個參數(shù)是將要被轉(zhuǎn)換的Java對象。如果用三個參數(shù)的方法,那么是一個Config。這個config可以提供一些轉(zhuǎn)換時的規(guī)則,過指定的Java對象的某些屬性進(jìn)行過濾或轉(zhuǎn)換等。
2、 將Map集合轉(zhuǎn)換成Json字符串
/** * function:將map轉(zhuǎn)換成json字符串 * @author hoojo * @createDate 2010-11-23 下午06:05:26 */ @Test public void writeMapJSON() { try { Map
新聞熱點(diǎn)
疑難解答