1. 程式人生 > >Java下利用Jackson進行JSON解析和序列化

Java下利用Jackson進行JSON解析和序列化

Java下常見的Json類庫有Gson、JSON-lib和Jackson等,Jackson相對來說比較高效,在專案中主要使用Jackson進行JSON和Java物件轉換,下面給出一些Jackson的JSON操作方法。

一、準備工作

首先去官網下載Jackson工具包,下載地址http://wiki.fasterxml.com/JacksonDownload。Jackson有1.x系列和2.x系列,截止目前2.x系列的最新版本是2.2.3,2.x系列有3個jar包需要下載:

jackson-core-2.2.3.jar(核心jar包,下載地址

jackson-annotations-2.2.3.jar(該包提供Json註解支援,

下載地址

jackson-databind-2.2.3.jar(下載地址

//JSON序列化和反序列化使用的User類
import java.util.Date;

public class User {
	private String name;
	private Integer age;
	private Date birthday;
	private String email;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}

二、JAVA物件轉JSON[JSON序列化]
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonDemo {
	public static void main(String[] args) throws ParseException, IOException {
		User user = new User();
		user.setName("小民");	
		user.setEmail("
[email protected]
"); user.setAge(20); SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd"); user.setBirthday(dateformat.parse("1996-10-01")); /** * ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中實現。 * ObjectMapper有多個JSON序列化的方法,可以把JSON字串儲存File、OutputStream等不同的介質中。 * writeValue(File arg0, Object arg1)把arg1轉成json序列,並儲存到arg0檔案中。 * writeValue(OutputStream arg0, Object arg1)把arg1轉成json序列,並儲存到arg0輸出流中。 * writeValueAsBytes(Object arg0)把arg0轉成json序列,並把結果輸出成位元組陣列。 * writeValueAsString(Object arg0)把arg0轉成json序列,並把結果輸出成字串。 */ ObjectMapper mapper = new ObjectMapper(); //User類轉JSON //輸出結果:{"name":"小民","age":20,"birthday":844099200000,"email":"[email protected]"} String json = mapper.writeValueAsString(user); System.out.println(json); //Java集合轉JSON //輸出結果:[{"name":"小民","age":20,"birthday":844099200000,"email":"[email protected]"}] List<User> users = new ArrayList<User>(); users.add(user); String jsonlist = mapper.writeValueAsString(users); System.out.println(jsonlist); } }

三、JSON轉Java類[JSON反序列化]

import java.io.IOException;
import java.text.ParseException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonDemo {
	public static void main(String[] args) throws ParseException, IOException {
		String json = "{\"name\":\"小民\",\"age\":20,\"birthday\":844099200000,\"email\":\"[email protected]\"}";
		
		/**
		 * ObjectMapper支援從byte[]、File、InputStream、字串等資料的JSON反序列化。
		 */
		ObjectMapper mapper = new ObjectMapper();
		User user = mapper.readValue(json, User.class);
		System.out.println(user);
	}
}

四、JSON註解

Jackson提供了一系列註解,方便對JSON序列化和反序列化進行控制,下面介紹一些常用的註解。

@JsonIgnore 此註解用於屬性上,作用是進行JSON操作時忽略該屬性。

@JsonFormat 此註解用於屬性上,作用是把Date型別直接轉化為想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。

@JsonProperty 此註解用於屬性上,作用是把該屬性的名稱序列化為另外一個名稱,如把trueName屬性序列化為name,@JsonProperty("name")。
import java.util.Date;
import com.fasterxml.jackson.annotation.*;

public class User {
	private String name;
	
	//不JSON序列化年齡屬性
	@JsonIgnore 
	private Integer age;
	
	//格式化日期屬性
	@JsonFormat(pattern = "yyyy年MM月dd日")
	private Date birthday;
	
	//序列化email屬性為mail
	@JsonProperty("mail")
	private String email;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}



import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonDemo {

	public static void main(String[] args) throws ParseException, IOException {
		User user = new User();
		user.setName("小民");	
		user.setEmail("[email protected]");
		user.setAge(20);
		
		SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
		user.setBirthday(dateformat.parse("1996-10-01"));		
		
		ObjectMapper mapper = new ObjectMapper();
		String json = mapper.writeValueAsString(user);
		System.out.println(json);
		//輸出結果:{"name":"小民","birthday":"1996年09月30日","mail":"[email protected]"}
	}
}


相關推薦

Java利用Jackson進行JSON解析序列

Java下常見的Json類庫有Gson、JSON-lib和Jackson等,Jackson相對來說比較高效,在專案中主要使用Jackson進行JSON和Java物件轉換,下面給出一些Jackson的JSON操作方法。 一、準備工作 首先去官網下載Jackson工具包,

Java中使用Jackson進行JSON解析序列

Java中使用Jackson進行JSON解析和序列化 1.新增依賴,在Maven的pom.xml檔案中新增以下依賴 <dependency> <groupId>com.fasterxml.jackson.core</groupId>

用c#實現json解析序列及格式化輸出

1. 簡介        json(javascript object notation)是一種使用可讀文字形式的檔案格式,用於傳輸由key-value對和array陣列形式的資料物件。這種資料格式在非同步的瀏覽器-服務端通訊模式中經常使用,作為替

淺談Json解析序列

從頭說起: 首先的首先,什麼是Json:一種資料表示形式,JSON:JavaScript Object Notation物件表示法 Json語法規則: 資料在鍵值對中 資料由逗號分隔 花括號儲存物件 方括號儲存陣列 像這樣: { "firstName":"J

JSON轉換序列的區別

大小 創建 替代 重新 臨時 序列化對象 一點 服務 文本格式 序列化是將對象狀態轉換為可保持或可傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換為對象。這兩個過程結合起來,可以輕松地存儲和傳輸數據。將對象的狀態信息轉換為可以存儲或傳輸的窗體的過程。 在序列化期間,對

JavaJackson進行jsonobject之間的轉換(並解決json中存在新增多餘欄位的問題)

1、新增jackson庫 如果是maven工程,需要在pom.xml中新增jackson的依賴: <dependency> <groupId>com.fasterxml.jackson.core</groupId>

使用 fastjson 在java進行 json字串物件的互轉

前提:我們在這裡只使用fastjson的轉json的jar依賴包      <!-- 轉json字串 --><dependency>      <groupId>com.alibaba</groupId>      <ar

iOS利用AFNetworking進行JSON資料解析

//初始化資料 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];    NSDictionary *parameter = @{@"status": @"ok",@"userData":myA

[Java][web]利用Spring隨時隨地獲得RequestSession

login html article -a private 綁定 ren alt 結束 利用Spring隨時隨地獲得Request和Session 一、準備工作: 在web.xml中加入 <listener> <

EF Core利用Mysql進行數據存儲在並發訪問的數據同步問題

sta 分享 AC point 解釋 evel post mysql數據庫 cor 小故事 在開始講這篇文章之前,我們來說一個小故事,純素虛構(真實的存錢邏輯並非如此) 小劉發工資後,趕忙拿著現金去銀行,準備把錢存起來,而與此同時,小劉的老婆劉嫂知道小劉的品性,知道他發

利用ionic3進行上一行左一行不動,中間移動的功能

export nta gen 監聽事件 ole rmp child d3d center 首先在html中的寫法是 <ion-header> <ion-navbar> <ion-title>歷史數據</ion-tit

windows如何在anaconda利用tensorboard進行資料視覺

當我們想檢視我們定義的計算圖的時候,可以利用tensorboard來視覺化我們定義的計算圖 首先設定圖檔案的寫入位置 1、summary_writer = tf.summary.FileWriter(r"G/calc_graph") 這句程式碼試講圖檔案寫入G碟

Win10利用Pycharm切換使用Python2Python3

之前使用的Python3,但又苦於有的程式使用Python2,所以只能在同一臺電腦上同時安裝Python2,Python3,之後具體在Pycharm中切換使用應對不同的專案。 1.安裝Python3

java中自定義封裝json以及物件的轉換

首先建立服務端返回的資料型別物件: package com.studio.pojo.util; import org.codehaus.jackson.map.ObjectMapper; publ

Linux系統利用OpenCV實現人臉檢測基於LBPH演算法的人臉識別

        本文主要的目的是進行人臉檢測和人臉識別。實驗環境為Ubuntu16.04 LTS虛擬機器版,技術為OpenCV,語言為c++。其中人臉檢測的主要過程是從一張圖片中檢測出人臉可以是一個或者是多個,然後用矩形或者圓形線圈標註出來。人臉識別是基於LBPH演算法實現

windows利用sniffer進行抓包改包,以arp攻擊

ARP攻擊原理及實驗 1. 進行arp IP欺騙 2.進行arp閘道器MAC欺騙 3.首先進行第一個測試” arp IP欺騙”.實驗環境VMWareWorkistation虛擬機器2臺(xp系統) 4

java與.net平臺進行的分析看法

現在,我們能看到到還只是一個很混亂的局面。而在未來,我們將看到.NET的成熟,以及它和JAVA的融合。JAVA將繼續保持它的特點:跨平臺的伺服器端應用,如WAP伺服器,或者是電信領域的如JAIN(Java API for Intelligent Networks,同時它在嵌入式系統中將繼續保持它的優勢,象智慧

利用Netty進行客戶端服務端互動的入門示例

Netty是基於事件驅動的、非同步的網路應用程式框架和工具,用以快速開發高效能、高可靠性的網路伺服器和客戶端程式。是一種NIO框架,下面從最簡單的Hello World示例開始,演示服務端和客戶端互動進行Netty互動。 1.首先,建立服務端 public class Dis

fastjson生成解析json資料,序列序列資料

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

OpenCV利用傅立葉變換逆變換實現影象卷積演算法,並附自己對於卷積核/模板核算子的理解!

學過訊號與系統的人都知道,卷積運算一般是轉化成頻率乘積再求逆來計算,因為這樣可以減少計算量,提高程式碼的效率。 影象卷積操作廣泛應用在影象濾波技術中。 影象卷積運算中一個重要概念是卷積核算子,它是模板核算子的一種,模板核算子實際上就是一個視窗矩陣,用這個視窗按畫素點滑動去