1. 程式人生 > >jackson的使用總結 jason物件xml list之間相互轉換

jackson的使用總結 jason物件xml list之間相互轉換

Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件。

前面有介紹過json-lib這個框架,線上博文:http://www.open-open.com/lib/view/open1327991992093.html

相比json-lib框架,Jackson所依賴的jar包較少,簡單易用並且效能也要相對高些。而且Jackson社群相對比較活躍,更新速度也比較快。

一、準備工作

1、 下載依賴庫jar包

然後在工程中匯入這個jar包即可開始工作

因為下面的程式是用junit測試用例執行的,所以還得新增junit的jar包。版本是junit-4.2.8

如果你需要轉換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;
/**
 * <b>function:</b>Jackson 將java物件轉換成JSON字串,也可以將JSON字串轉換成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 [email protected]
 * @version 1.0
 */
@SuppressWarnings("unchecked")
public class JacksonTest {
    private JsonGenerator jsonGenerator = null;
    private ObjectMapper objectMapper = null;
    private AccountBean bean = null;
    @Before
    public void init() {
        bean = new AccountBean();
        bean.setAddress("china-Guangzhou");
        bean.setEmail("[email protected]");
        bean.setId(1);
        bean.setName("hoojo");
        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;
            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
    @Override
    public 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、setter
    public Birthday() {}
    @Override
    public String toString() {
        return this.birthday;
    }
}

二、Java物件轉換成JSON

1、 JavaBean(Entity/Model)轉換成JSON

/**
 * <b>function:</b>將java物件轉換成json字串
 * @author hoojo
 * @createDate 2010-11-23 下午06:01:10
 */
@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
{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"[email protected]"}
ObjectMapper
{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"[email protected]"}

上面分別利用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字串

/**
 * <b>function:</b>將map轉換成json字串
 * @author hoojo
 * @createDate 2010-11-23 下午06:05:26
 */
@Test
public void writeMapJSON() {
    try {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name", bean.getName());
        map.put("account", bean);
        bean = new AccountBean();
        bean.setAddress("china-Beijin");
            
           

相關推薦

jackson的使用總結 jason物件xml list之間相互轉換

Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件。 前面有介紹過json-lib這個框架,線上博文:http://www.open-open.com/lib/view/open1327991992093.html 相比json-l

C# DataTable 和List之間相互轉換的方法

dbn execute 屬性 ins 集合 方法 summary efault getprop 一、List<T>/IEnumerable轉換到DataTable/DataView private DataTable ToDataTable<T>(

JSONObject、JSONArray、String、List之間相互轉換

  List<BmKh> BmKhs = new ArrayList<>(); // BmKh bmKh=new BmKh(); // bmKh.setBm("1"); // bmKh.setMc("2

Xml字串與C#物件之間相互轉換

我們常常需要讀取xml檔案,把裡面的資訊轉化為我們自定義的型別,或則吧自定義型別轉化為Xml字串。在這裡介紹一個比較簡單的物件轉化方法。在我自己的Framwork裡面也多次用到。裡面涉及到節點、屬性、集合。 示例一 該xml檔案涉及到屬性、節點集合不涉及個節點: <?x

PHP陣列與物件之間相互轉換

/**  * 陣列 轉 物件  *  * @param array $arr 陣列  * @return object  */ function ar

利用Google Gson實現JSON字串和物件之間相互轉換

最近一個專案需要用到JSON,需要在JSON字串和物件之間相互轉換,在網上找了些資料,發現google的Gson還是比較不錯的。 廢話不說,下面是簡單的例子: 先上原始碼:下載(包含jar包) Person實體類 package com.hsun.json; /** * Pe

SOS, 請教:XML和struct之間相互轉換的問題

現在配置基本都像XML方向轉變。那麼, 1、以前是按struct大小直接寫入檔案的,反過來,就直接按struct大小讀入struct就可以了,簡潔; 2、轉XML後,涉及到struct到xml節點之間的相互轉換,這個非常多的重複程式碼。而且太繁瑣,舉個例子,假設一個配置struct有100個欄位,

修改tomcat部署下,專案配置(涉及properties,xml,zip,war之間相互轉換修改)

 思路:傳入tomcat部署路徑,  1,遍歷tomcat下所有的資料夾,因為要修改  的檔案都是固定,所以根據傳入路徑就能拼裝要修改的檔案。  2,像1的解決思路,可能導致tomcat不斷在啟動,因為檔案在修改。  所以又想到,將要修改的war包改成Zip,因為其結構都一樣

字串、字元陣列、list之間相互轉化

1.關於java.lang.string.split xxx.split()方法可以將一個字串分割為子字串,然後將結果作為字串陣列返回。 2.字串轉字元陣列 String str ="

XML字串和XML DOCUMENT的相互轉換總結

轉載自: 只是為了查詢方面 在做一般的XML資料交換過程中,我更樂意傳遞XML字串,而不是格式化的XML Document。這就涉及到XML字串和Xml Document的轉換問題,這是個很簡單的問題。一、使用最原始的javax.xml.parsers,標準的jdk a

Json與物件list之間的轉化

public class JsonUtils {     // 定義jackson物件     private static final ObjectMapper MAPPER = new ObjectMapper();  //也可以map轉物件也可以用modelmap。自行

JAXB的使用(java物件xml文字的相互轉換

JAXB(Java Architecture for XML Binding) 是一個業界的標準,是一項可以根據XML Schema產生Java類的技術。該過程中,JAXB也提供了將XML例項文件反向生成Java物件樹的方法,並能將Java物件樹的內容重新

XStream實現javabean與xml之間相互轉換

XStream是thoughtworks公司釋出的一個簡單的Java類庫,用於將JavaBean序列化為XML,並且能夠將XML檔案反向轉換為JavaBean. 例項: user.java impor

numpy的array和python中自帶的list之間相互轉化

a=([3.234,34,3.777,6.33]) a為python的list型別 將a轉化為numpy的array:   np.array(a) array([  3.234,  34.   ,   3.777,   6.33 ]) 將a轉化為python的list

xml檔案和DataTable之間相互轉換

using System.Xml; using System.Xml.Serialization; /// <summary> /// 下面兩個方法實現xml

Android px、dp、sp之間相互轉換

系統 als 屏幕大小 span ava 不同 text 自動 nal dp(dip): device independent pixels(設備獨立像素). 不同設備有不同的顯示效果,這個和設備硬件有關,一般我們為了支持WVGA、HVGA和QVGA 推薦使用這個,不依

Android 單位dp和px之間相互轉換

style pan static float logs ati col return roi public class DensityUtil { /** * 根據手機的分辨率從 dp 的單位 轉成為 px(像素) */

關於js中的json對象,json串,數組之間相互轉換

obj oca color 轉換成 之間 str 關於 blog spa 將json對象轉換成string var loginUser = {username: username, password: password}//方式一 localStorage.setItem

JAVA 實現XML與JSON 相互轉換

tst throws light getc con parent urn In 工作 原文地址https://blog.csdn.net/congcong68/article/details/39029907 在工作中,經常碰到XML轉為JSON或者JSON轉為XML,在這

js時間戳與日期格式之間相互轉換

時間日期 TP var gets nbsp unix時間 其他 value nds 時間戳:是一種時間表示方式,定義為從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數。Unix時間戳不僅被使用在Unix系統、類Unix系統中,也在許多其他操作系統中被