1. 程式人生 > >Jackson 框架,輕易轉換JSON

Jackson 框架,輕易轉換JSON

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

相比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");
        bean.setEmail("[email protected]");
        map.put("account2", bean);
        System.out.println("jsonGenerator");
        jsonGenerator.writeObject(map);
        System.out.println("");
        System.out.println("objectMapper");
        objectMapper.writeValue(System.out, map);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

轉換後結果如下:

jsonGenerator
{"account2":{"address":"china-Beijin","name":null,"id":0,"birthday":null,"email":"[email protected]"},"name":"hoojo",
"account":{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"[email protected]"}}
objectMapper
{"account2":{"address":"china-Beijin","name":null,"id":0,"birthday":null,"email":"[email protected]"},"name":"hoojo",
"account":{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"[email protected]"}}

3、 將List集合轉換成json

/**
 * <b>function:</b>將list集合轉換成json字串
 * @author hoojo
 * @createDate 2010-11-23 下午06:05:59
 */
@Test
            
           

相關推薦

Jackson 框架輕易轉換JSON

Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件。 相比json-lib框架,Jackson所依賴的jar包較少,簡單易用並且效能也要相對高些。而且Jackson社群相對比較活躍,更新速度也

android jackson解析物件轉jsonjson轉物件map...

題外話:以前一直用的Gson,後來發現Jackson的確要比Gson快,現在估計很長一段時間都要用jackson了。 前言以及準備工作: 當我在網上找Jackson的依賴包的時候,看到很多文章都是複製過來複制過去的,裡面給的依賴包只有核心包jackson-core-2.x

使用Jackson轉換JSON日期格式設置

ges 技術 自定義 -c color orm jackson 解決 style 在我們使用jackjson時時間默認輸出如下: 輸出是一串時間戳,不符合我們的要求,所以想到jackjson對時間的處理有他默認的格式,然後網上搜集各種資料,得出一下方式可以解決 取消j

Jackson 轉換JSONSpringMVC ajax 輸出當值為null或者空不輸出欄位@JsonInclude

當我們提供介面的時候,  Ajax  返回的時候,當物件在轉換  JSON  (序列化)的時候,值為Null 或者為“”的欄位還是輸出來了。看上去不優雅。 現在我敘述三種方式來控制這種情況。 註解的方式( @JsonInc

高效解析json例子Jackson框架

Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件。 相比json-lib框架,Jackson所依賴的jar包較少,簡單易用並且效能也要相對高些。而且Jackson社群相對比較活躍,更新速

利用Jackson框架json字串轉換成泛型List

Jackson處理一般的JavaBean和Json之間的轉換隻要使用ObjectMapper 物件的readValue和writeValueAsString兩個方法就能實現。但是如果要轉換複雜型別Collection如 List<YourBean>,那麼就需要先

json字符串轉換json對象json對象轉換成字符串轉換成字符串字符串轉成值

兩個 負數 相關 5.6 對象 style pre www. 進行 主要內容: 一、json相關概念 二、json字符串轉換成json對象 (字符串-->JSON對象) 三、json對象轉換成字符串(json對象-->字符串) 四、將值轉換成字符串(值-

獲取window.location.href中傳的值並且轉換json數據使用

() win urn spa cati var 使用 並且 應該 做個記錄保存一下,以免以後再次用到忘記了。 function locVal(){ var url=window.location.href; if (url.indexOf(‘?‘)==-1

struts2的fastjson,jackson轉換json簡單使用

println lte ebe mat tin over release led 逗號 一.Fastjson使用   1.導入fastjson.jar包   2.使用方法   對於對象和集合使用同樣的方法     使用JSON.toJSONString(對象)返回一個jso

將spring boot 預設的jackson框架轉換為fastjson

將spring boot 預設的jackson框架轉換為fastjson fastjson可以預設將下劃線引數轉換為駝峰屬性。 實現程式碼: 一、新增依賴 <dependency> <groupId>com.alibaba</groupId>

string與json map與json轉換

Map<String, Object> sendDateMap // map轉json物件 String sendDateStr = JSON.toJSONString(sendDateMap);(jsOn格式的) Map<String, Object> resultMap

mysql欄位用json格式mybatis框架傳前端格式轉意問題

a 前言 錯誤 解決 思考 前言 今天在實現點功能的時候,需要將mysql中的一個欄位型別設定為json,使用的框架是ssm,mybatis的逆向工程返回相應的欄位的型別是object,通過@responsebody註解傳

Robotframework中字典和JSON的區別相互轉換方法

1、標準的Json格式如下:  { "firstName":"Eddy" , "lastName":"Peng" } key和value都是採用雙引號的方式進行包裹。 2、但是Robotframework中建立的字典預設採用的是單引號進行包裹,所以並不能直接作為JSON使用

Jackson 2.9.8 釋出Java 處理 JSON 資料類庫

   Jackson 2.9.8 已釋出,更新內容如下: core Streaming #488: Fail earlier on coercions from "too big" BigInteger into fixed-size types (in

java返回的json資料中Date型別格式的轉換

轉載自:http://blessht.iteye.com/blog/2018901 返回json資料時,資料庫中的Date型別是這種格式:"planTime":{"date":22,"day":6,"hours":0,"minutes":0,"month":3,"sec

JSON技術-Gson將bean轉換json確保資料的正確使用FastJson將Json轉換Bean

一 、各個JSON技術的簡介和優劣 1.json-lib json-lib最開始的也是應用最廣泛的json解析工具,json-lib 不好的地方確實是依賴於很多第三方包, 包括commons-beanutils.jar,commons-collections-3.2.jar

spring boot 使用jackson 將資料物件轉換json字串

首先在pom.xml中新增jackson依賴: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</

Android小問題:String轉換Json以及org.json.JSONObject與org.json.JSONArray相互新增

import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; 這是Android原生的Js

jackson框架解析json

Jackson解析的速度算是同類框架中最快的,同時也是Spring MVC中內建使用的解析方式。 準備工作: 並將jar包新增到libs中 package com.example.jacksontest; import org.codehaus.jackson

接受第三方介面返回的json資料解析轉換成Javabean

我的微信端專案使用到了json 資料傳輸格式,在這記錄一下,剛開始時是一臉的懵逼。      通過HttpClientUtils.post()工具類傳送json資料,使用字串String接受返回的json資料。 String   res=HttpClientUtils.po