iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
自我挑戰組

轉職仔自學Java筆記本系列 第 13

Gson 與 Jackson

  • 分享至 

  • xImage
  •  

前面提到過 Java 並沒有內建解析 Json 的套件,需要導入第三方的工具庫才可以解析並操作 Json,那除了先前使用的 org.json 之外,還有許多好用的工具庫可以使用,其中最有名的就是:

  • Gson: 由 Google 團隊開發的框架
  • Jackson: 由社群開發的開源框架

以下為了示範,我們先建立一個 Car 的物件,具有廠牌 (brand)、顏色 (color) 與出場年份 (years),方便接下來演示以 Gson 與 Jackson 示範序列化與反序列化。

// 範例 Car 類別
public class Car {

    private String brand; //廠牌
    private String color; //顏色
    private int years;    //出場年份

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getYears() {
        return years;
    }

    public void setYears(int years) {
        this.years = years;
    }
}

Gson

官方說明:

https://github.com/google/gson

Jar包下載點:

https://maven-badges.herokuapp.com/maven-central/com.google.code.gson/gson

Gson 為 Google 因公司內部需求自行研發而來,後來成為開源 library,最主要的功能是提供了簡便的方式  toJson() 與 fromJson() 來完成 Java 物件(objects) 與 JSON 字串的轉換,對於複雜的物件對象也能有好的處理,是目前十分主流的解析 Json 的套件。

如果以 Maven 建立的專案,可以於 pom.xml 添加以下依賴項即可。

<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.10.1</version>
</dependency>

使用簡介

使用 Gson 前要先透過 GsonBuilder() 建立一個 Gson 物件。

//建立 Gson 物件
Gson gson = new GsonBuilder().create();

fromJson(jsonString, Class) 可把 JSON 字串轉變為物件對象(反序列化)

// 使用 fromJson(jsonString, Class)
String jsonString = "{\"brand\":\"BMV\", \"color\":\"black\", \"years\":2000}";

Car car = gson.fromJson(jsonString, Car.class);

toJson()方法獲取物件對象的 JSON 字串表示形式(序列化)。

String jsonString = gson.toJson(car);

Jackson

官方說明:

https://github.com/FasterXML/jackson

Jar檔下載:

https://search.maven.org/search?q=g:com.fasterxml.jackson.core AND a:jackson-databind

Jackson 的使用非常廣泛用來解析 Json 的開源框架,更新的速度快,有良好的社群支持。在 Java Spring 框架也預設使用 Jackson 進行 JSON 處理。

Jackson 有三個核心模組,分別是 Streaming、Databid、Annotations,通過這些包可以方便的對 JSON 進行操作。

  • Streaming ( jackson-core) 模組: 定義了一些流處理相關的 API 例如 JsonPaser 。
  • Annotations (jackson-annotations)模組:提供了 Jackson 中註解的功能。
  • Databind 在 (jackson-databind )模組: 在 Streaming 包的基礎上實現了物件對象的綁定相關 API 如 ObjectMapper,依賴於 Streaming 和 Annotations 包。

如果以 Maven 建立的專案,可以於 pom.xml 添加以下依賴項即可。

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId>   
    <version>2.15.2</version> 
</dependency>

使用簡介

ObjectMapper 物件對映器是 Jackson 庫中最常用的一個類,他可以進行 Java 物件對象和 JSON 字串之間快速轉換。使用時要先建立一個 ObjectMapper 物件。

ObjectMapper objectMapper = new ObjectMapper();

透過 readValue() 方法可以將字串轉換成 Java 物件對象(反序列化);readValue()並不限與讀取字串,亦可以用於讀取位元資料、檔案留等等。

String jsonString = "{\"brand\":\"BMV\", \"color\":\"black\", \"years\":2000}";

Car car = objectMapper.readValue(jsonString, Car.class);

透過 writeValue() 方法可以將 Java 物件轉換成 JSON 字串(序列化)。

String json = objectMapper.writeValueAsString(person);

至於如果想要 Gson 與 Jackson 彼此之間細部的差異比較,推薦可以參考下列文章的比較:

Jackson vs. Gson vs. JSON-B vs. JSON-P vs. org.JSON vs. Jsonpath | Java JSON libraries features comparison

https://itsallbinary.com/jackson-vs-gson-vs-json-b-vs-json-p-vs-org-json-vs-jsonpath-java-json-libraries-features-comparison/


上一篇
Java 中的 Json(2)
下一篇
Java Variable 與 Method
系列文
轉職仔自學Java筆記本22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言