1. 程式人生 > >高效解析json例子,Jackson框架

高效解析json例子,Jackson框架

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;
/**
 * function: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

/**
 * function:將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字串

/**
 * function:將map轉換成json字串
 * @author hoojo
 * @createDate 2010-11-23 下午06:05:26
 */
@Test
public void writeMapJSON() {
    try {
        Map map = new HashMap();
        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":{
            
           

相關推薦

高效解析json例子Jackson框架

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

jackson解析json字串首字母大寫會自動轉為小寫

問題 樓主碰到的問題是,在實體類和表中定義的某個欄位為RMBPrice,首字母大寫,sql查詢出來的列名也是大寫的RMBPrice,但是使用jquery的datatables初始化列時,卻出錯。那一行的程式碼如下: {"name": "RMBPrice", "data": "RM

關於使用jackson.jar解析JSON大寫JSON key值發生報錯的問題

最近在專案中呼叫.NET的服務時,Jackson在解析返回的json字串時始終報錯,糾結很久之後才找到原因,原來是是由於json字串中的字母都是首字母大寫,導致jackson找不到相應的KEY。         解決方法有兩種: 直接將bean物件中的屬性改為public

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

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

動態解析JSON字串將資料存入資料庫

我在使用netty時候,由於不同裝置發出的JSON字串不一樣,我需要一個動態解析JSON字串方法去解決,我的思路是先將json字串通過gson這個類轉成map,由於在執行期間無法得知T的具體型別,對這個類的物件進行序列化和反序列化都不能正常進行。Gson通過藉助TypeTok

解析json陣列取其中一部分組成新陣列物件

var dataArr = [{id:"1111",name:"aaa",age:"22"},{id:"2222",name:"bbb",age:"33"}]; var jsonTarget=[]; var ids = ""; //第一種方法 for (var i = 0;

安卓開發筆記(九)—— HttpURLConnection請求訪問Web服務解析JSON資料多執行緒CardView佈局技術(bilibili的使用者視訊資訊獲取軟體)

中山大學資料科學與計算機學院本科生實驗報告 (2018年秋季學期) 一、實驗題目 WEB API 第十四周實驗目的 學會使用HttpURLConnection請求訪問Web服務 學習Android執行緒機制,學會執行緒更新UI 學會解析JSO

解析json並按照某個欄位排序

本文將為大家介紹json解析並按照某個欄位排序的方法。如果是漢字,轉化為漢語拼音後,按照字典順序排序。   原始json [{"proportionCost":0,"busiName":"aaav","userList":"李雷","allCost":53800,"liuCos

如何統一解析JSON資料使用Gson結合泛型類靈活讓您一勞永逸

作為一名android 客戶端開發人員,學會解決問題和總結問題的習慣是很重要的。。。那麼我們app介面資料返回通常是以下格式: {"code":"0000","data": {"code":"0002","resultData":null,"resultMsg":"使用者T

怎麼解析Json資料然後把解析到的Json資料填充到佈局中?

一.首先把需要解析的Json資料如下所示: { "res_code": 0, "res_error": "", "res_body": { "Counts": 11596, "PageCount": 580,

Android 解析json物件存放到List中

比如解析這段從伺服器端返回的json字串: [{"Money":3,"EtcOutTime":"2017-5-20 15:30:22","CarId":0,"EtcInTime":"2017-5-20

解析json字串根據key得到對應的value的方法

最近公司的專案,寫了個傳入json字串和要獲取的key,返回相應value的方法。 public String jxJson(String mkey, String strJson) { String value = "";

fastjson生成和解析json資料序列化和反序列化資料

publicstaticfinalObject parse(String text);//把JSON文字parse為JSONObject或者JSONArraypublicstaticfinalJSONObject parseObject(String text);// 把JSON文字parse成JSONObj

Gson解析Json欄位名一定要完全一樣連空格都不能有

今日除錯的時候發現上報的資料明明有這一項,但是一直解析出來為NULL{"aaa ":101}public class AAA{    private Integer aaa;set方法get方法}Gson解析出來後一直是null。查了好久才發現了尾部的這個空格將json修改為

JSON解析類庫之Fastjson(1) --- Fastjson類庫學習, 生成與解析json資料json字串與Java物件互轉

JSON解析類庫之Fastjson(1) --- Fastjson基礎知識、簡單JavaBean與複雜Bean物件與JSON互轉 -- Fastjson類庫學習, 生成與解析json資料,json

關於使用newtonsoft 解析json字串即是將json字串轉換成json物件的寫法

  首先將newtonsoft 引用到工程中,解析json字串有兩種格式,一種是單一的json字串,另一種是json字串資料格式 1,如果是單一的一條json字串,則採用如下方法: string jsonText = @"{""input"" : ""value"", ""

java解析json字串多層解析

json泛型如下 { "code": 1, "message": "查詢成功", "data": [ { "type": 1, "question": "地層壓力與同井深的淡水靜液壓力之

stm32使用cjson檔案解析json檔案分配記憶體宕機問題解決方案

使用乙太網從伺服器上拉取json字串,接收之後進行解析,但是cjson的包在使用malloc和free的時候經常出現問題,在研究stm32的記憶體分配問題之後,網上很多說是要自己寫記憶體管理,但是實際使用會產生很多問題,但是檢視手冊發現stm32F407本身已經有192kb的

解析json字串並且獲取其中某個key的值

<span style="font-size:18px;">public static void main(String[] args) { String findStr = "hobby,listening,chinese";//查詢json字串中的某個k

Jackson 框架輕易轉換JSON

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